【问题标题】:Message from worker to worker in a nodejs clusternodejs集群中从worker到worker的消息
【发布时间】:2018-11-09 20:25:19
【问题描述】:

当我创建类似的集群应用时

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 在不使用集群模式的情况下单独显示所有子进程我也会对这个解决方案感到满意。

【问题讨论】:

  • 你为什么关心在 pm2 列表中有一个进程?,pm2 包装你的代码,所以你将永远是一个工人。
  • 不要在 pm2 集群模式下运行。您的代码创建集群。您不希望 pm2 代替您的代码来执行此操作。如果您想查看所有进程,请查看 OS 进程列表,而不是 pm2 进程列表。
  • @MarcosCasagrande 因为它会报告使用情况和内容,并且还会在每个进程中记录不同的文件

标签: javascript node.js websocket


【解决方案1】:

如果你想使用process.message,你将无法使用pm2集群模式,因为process.message会向master发送消息。

如果要使用pm2集群模式,就得使用另一种worker之间的通信方式,比如Redis,RabbitMQ,Unix Sockets

有一些软件包可以让您非常轻松地设置 IPC 通信,例如:node-ipc

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-09
    • 1970-01-01
    • 1970-01-01
    • 2021-05-06
    相关资源
    最近更新 更多