2017-04-05 95 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 –