【问题标题】:NodeJS clusters assign server port from config fileNodeJS 集群从配置文件中分配服务器端口
【发布时间】:2017-08-30 23:36:19
【问题描述】:

由于在将端口分配给应用程序进行侦听之前,服务器配置存储在 XML 文件中,因此我必须读取 XML 文件,将 XML 字符串输出转换为 JSON 以提高可读性。我还使用节点集群来使节点性能更好。下面是代码sn-p。

//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(function(config) {} 中可用。由于节点代码执行是异步的,该值在 const server = app.listen(port, () = 中不可用> { .

任何人都可以提出解决此问题的解决方案吗?谢谢。

【问题讨论】:

    标签: javascript node.js node-cluster


    【解决方案1】:

    只需异步调用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);
       }) ;
    }
    

    【讨论】:

    • 谢谢@Lorenz
    猜你喜欢
    • 2018-09-16
    • 2015-07-29
    • 2019-07-23
    • 2017-11-10
    • 2015-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多