2017-04-05 91 views
0

由於在將端口分配給應用程序進行偵聽之前,服務器配置存儲在XML文件中,因此我必須讀取XML文件,才能將XML字符串輸出轉換爲JSON以提高可讀性。我還使用節點集羣來使節點更好地運行。以下是代碼片段。NodeJS集羣從配置文件中分配服務器端口

//getschema.js 
module.exports = function(callback) { 
    var filepath='serverconfig.xml'; 
    var fs = require('fs'); 
    var xml2js = require('xml2js'); 
    fs.readFile(filepath, 'utf8', function (err, xmlStr) { 
     if (err) throw (err); 
     xml2js.parseString(xmlStr, {}, function(err, json){ 
      callback(json.serverconfig); 
     }); 
    });  
}; 

//server.js 
var serverdetails = require('./getschema'); 
var port; 
serverdetails(function(config) { 
     port  = config.port;//getting port values as 4000 
}); 

const cluster  = require('cluster'); 

if (cluster.isMaster) { 
    for (let i = 0; i < numCPUs; i++) { 
    cluster.fork(); 
    } 
} else { 
     console.log(port); //getting undefined 
     const server = app.listen(port,() => { 
      console.log(`Worker ${process.pid} started`); 
     }); 
     const io = require('socket.io')(server); 
} 

什麼,我現在面臨在上面的代碼如圖所示的問題,我不能夠分配的端口從配置文件作爲服務器端口了。該值是在serverdetails可用的(函數(配置){}。由於節點執行代碼是異步的該值是不是在const的服務器= app.listen(端口可用,()=> {

任何人都可以提出一個解決方案爲解決這個問題,謝謝

回答

0

只需撥打server.listen異步:?

if (cluster.isMaster) { 
    (...) 
} else { 
    serverdetails(function(config) { 
     var port  = config.port;//getting port values as 4000 
     console.log(port); //getting the correct value 
     const server = app.listen(port,() => { 
      console.log(`Worker ${process.pid} started`); 
     }); 
     const io = require('socket.io')(server); 
    }) ; 
} 
+0

謝謝@Lorenz –