我正在绕圈子解决以下问题,我想将我的 zmq 相关代码分离到单独的模块中,我已经在集群中启动了我的 express 应用程序,如下所示在我的 www.js 文件中
if (cluster.isMaster) {
for (; i < cpuLength; i++) {
spawn();
}
}
在我的 zmq.js 文件中,我想创建一个推送套接字,但我无法将它绑定到一个端口,因为......好吧,它是绑定未连接,因此在第一次集群分叉后会出错。
我可以将我的套接字代码移动到我的 www.js 文件中,但是每当我需要使用我的套接字时,我都必须要求 www 文件。我想将所有与 zmq 相关的东西保存在单独的文件中。任何建议如何让它工作?
更多信息。我尝试在套接字上只调用一次绑定,并将套接字保持在模块/全局范围内,如果我使用它来发送消息,它不会引发任何错误,但我的拉式套接字中没有收到任何消息。我发送时收到的唯一消息是针对我调用绑定的进程,对于进程的其余部分,套接字不为空,但它似乎也没有做任何事情。
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 调用中按顺序将套接字绑定到不同的端口,但我确信这不是最好的,如果我找到更好的解决方案,或者其他人会更新请让我知道。