我可以使用process.send
从工作人员向主人发送消息。我可以使用以下代码从主服务器向每个工作人员发送消息。
for (var id in cluster.workers) {
cluster.workers[id].send({command: 'doSomething'});
}
要从工作人员向其他工作人员发送消息,我必须向主人发送消息,然后将消息转发给主人。这导致原始发件人也收到了邮件,这是我想避免的,但我可以忍受它!
我也尝试直接从工作人员发送消息,就像在主服务器中完成消息一样,但cluster.workers
在工作人员中是undefined
。
还有其他办法吗?
答案 0 :(得分:2)
您可以比较发件人和收件人的pid's
:
worker.on('message', function(msg) {
for (var id in cluster.workers) {
if (cluster.workers[id].process.pid !== this.process.pid) {
cluster.workers[id].send({
command: 'doSomething',
from: this.process.pid
});
}
}
}
答案 1 :(得分:0)
我创建了一个名为ipc-messenger的简单包,它有助于实现此目的。它提供了一个抽象,其中隐藏了用户的详细信息。
函数messageSiblings
可用于仅向其他工作人员发送消息,messageWorkers
向所有工作人员发送消息。
示例:
var ipcm = require('ipc-messenger')
ipcm.messageSiblings('hello')