有没有办法从一个工人向 node.js 中的其他工人发送消息?

Is there a way to send a message from a worker to other workers in node.js?

我可以使用process.send从工人向主人发送消息。我可以使用下面的代码从 master 向每个 worker 发送消息。

for (var id in cluster.workers) {
  cluster.workers[id].send({command: 'doSomething'});
}

要从一个工人向其他工人发送消息,我必须向主人发送一条消息,然后让它转发消息。这会导致原始发件人也收到邮件,这是我想避免的事情,但我可以接受!

我也尝试像在 master 中那样直接从 worker 发送消息,但是 cluster.workers 在 worker 中是 undefined

还有其他方法吗?

您可以比较 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
      });

    }

  }

}

我创建了一个名为 ipc-messenger 的简单程序包来帮助完成此操作。它提供了一种抽象,其中的细节对用户是隐藏的。

函数messageSiblings可用于仅向其他工作人员发送消息,messageWorkers可用于向所有工作人员发送消息。

示例:

var ipcm = require('ipc-messenger')
ipcm.messageSiblings('hello')