当我创建像
这样的群集应用时var cluster = require('cluster');
if (cluster.isWorker) {
console.log('Worker ' + process.pid + ' has started.');
}
if (cluster.isMaster) {
console.log('Master ' + process.pid + ' has started.');
// Fork workers.
for (var i = 0; i < require("os").cpus().length; i++) {
var worker = cluster.fork();
}
}
然后在群集模式下使用pm2
运行它
pm2 start index.js -i 0
我的isMaster
部分永远不会运行,我认为这是因为pm2在启动我的应用程序时是主人,因此它永远不会成为主人,所以问题就出现了。我需要能够在我的工作人员之间进行通信,因为他们保持websocket连接,这似乎是广播内容的唯一方式。有什么选择?
如果我在没有集群模式(pm2 start index.js
)的情况下运行它,那么一切似乎都按预期执行但是我只在pm2 list
中得到一个进程,这是一个无赖,如果有办法获得围绕它并让pm2分别显示所有子进程而不使用其集群模式我也对该解决方案感到满意。
答案 0 :(得分:2)
如果您想使用process.message
,您将无法使用pm2群集模式,因为process.message
会向主人发送消息。
如果要使用pm2群集模式,则必须使用其他工作方式,例如Redis
,RabbitMQ
,Unix Sockets
。
有一些软件包可以让您轻松设置IPC通信,例如:node-ipc