zmq节点js集群

时间:2015-10-22 19:16:09

标签: node.js cluster-computing zeromq node-cluster

我在圈子中遇到以下问题, 我想将我的zmq相关代码分离到单独的模块中,我已经在集群中启动了我的快速应用程序,如下面的我的www.js文件

 if (cluster.isMaster) {
    for (; i < cpuLength; i++) {
      spawn();
    }
}

在我的zmq.js文件中,我想创建一个推送套接字, 但我无法将它绑定到一个端口,因为..好吧,它是绑定而不是连接,所以它在第一个集群fork之后出错。

我可以将我的套接字代码移动到我的www.js文件中,但是每当我需要使用我的套接字时我都需要www文件。我想将所有与zmq相关的内容保存到单独的文件中。任何建议如何让它工作?

更多信息。 我试图在socket上只调用一次bind,并在模块/全局范围内保持套接字,如果我用它来发送消息,它不会抛出任何错误,但我没有在我的套接字中收到任何消息。 我发送的消息只接收到我调用bind的进程,对于其余的进程,socket不是null,但它似乎也没有做任何事情。

www.js

function startServer() {
  if (cluster.isMaster) {
    for (; i < cpuLength; i++) {
       cluster.fork();
    }
    cluster.on('online', function (worker) {
      log.debug('Worker ' + worker.process.pid + ' is online.');
    });
  } else {
    log.info('Starting server at port ' + config.get('port'));
    app.listen(config.get('port'));
  }
}

zm.js

if (cluster.isMaster) {
  var p = ip + port;
  socket.bind(p, function (err) {
    if (!err) {
      bunyan.info('ZMQ bound ', process.pid);
      bunyan.info('ZMQ bound to port', p);
    } 
  });
} 

我尝试过使用绑定主服务器,或者使用分叉进程,但似乎都没有工作。

更新: 我已经让它暂时工作了,通过每次fork调用将socket连接到不同的端口,但我确信这不是最好的,如果我找到更好的解决方案,或者如果有其他人请更新让我知道。

0 个答案:

没有答案