Есть ли способ отправить сообщение от работника другим работникам в node.js?

Я могу использовать process.send для отправки сообщения от работника к мастеру. Я могу использовать следующий код для отправки сообщения от мастера каждому работнику.

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

Чтобы отправить сообщение от работника другим работникам, я должен отправить сообщение мастеру, а затем переслать сообщение. Это приводит к тому, что первоначальный отправитель также получает сообщение, и я бы хотел этого избежать, но я могу с этим смириться!

Я также пытался отправить сообщение непосредственно из рабочего, как это делается в мастере, но cluster.workers это undefined в рабочих.

Есть ли другой способ сделать это?


person rohithpr    schedule 17.02.2016    source источник
comment
Попробуйте использовать систему сообщений, например, Zero MQ (0MQ) или Kafka (более сложная).   -  person akaphenom    schedule 17.02.2016
comment
Я предлагаю вам использовать REDIS pub/sub, это точно даст вам то, что вы хотите.   -  person Abdullah Shahin    schedule 17.02.2016


Ответы (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
      });

    }

  }

}
person stdob--    schedule 17.02.2016

Я создал простой пакет под названием ipc-messenger, который помогает это сделать. Он обеспечивает абстракцию, в которой детали скрыты от пользователя.

Функцию messageSiblings можно использовать для отправки сообщений только другим воркерам, а messageWorkers — для отправки сообщений всем воркерам.

Пример:

var ipcm = require('ipc-messenger')
ipcm.messageSiblings('hello')
person rohithpr    schedule 09.04.2016