我在圈子中遇到以下问题, 我想将我的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连接到不同的端口,但我确信这不是最好的,如果我找到更好的解决方案,或者如果有其他人请更新让我知道。