【问题标题】:nodejs cluster messaging vs websocketsnodejs 集群消息传递与 websockets
【发布时间】:2019-02-20 07:19:17
【问题描述】:

我正在开发一个带有 nodeJS 和集群的应用程序,其中有多个 worker 在每个 worker 上具有不同的端口,我可能需要让 worker 相互通信,我知道 nodeJS 集群已经内置了对 master 和其他 worker 之间消息传递的支持。

我对此有 3 个问题。 1.我可以在没有主人的工人之间发送消息以加快处理速度吗?

  1. 在每个 worker 上打开一个 websocket 来监听其他 worker 以替换集群中的内置消息传递是否是个好主意,是否更快?

  2. 如果应用程序可以扩展到多个服务器,我认为 websocket 将是答案,请提出任何替代方案?

【问题讨论】:

    标签: node.js websocket


    【解决方案1】:
    1. 没有。通常,子进程彼此不知道。他们只知道父母。
    2. 不是更快,而是更慢。但这可能会更好,因为否则您将无法扩展到多台机器上(集群仅创建子进程)。取决于您的需求。
    3. 例如尝试 zeromq(我确定有 NodeJS 的绑定,谷歌它)。或专用的消息代理(如 RabbitMQ)。与 websocket 不同,它们是为解决您的特定问题而创建的。

    【讨论】:

      【解决方案2】:

      IPC。

      每个 NodeJS 子进程(以 fork 开头)都有process.send(<data>); 方法。并且可以收听来自父母的消息。如果需要,请随意传递对象。它将被字符串化并在另一端解析。

      process.on('message', (data) => {});
      

      当您在父端派生进程时 - 它也有消息传递方法。

      const child = child_process.fork('child.js');
      child.on('message', (data) => { });
      

      如果你想让workers/childs相互通信 - 你可以通过向master发送特定的消息来管理它,master会转发给指定的worker。

      文档:Child Process Event "Message"

      【讨论】:

        猜你喜欢
        • 2017-10-25
        • 1970-01-01
        • 2021-01-10
        • 1970-01-01
        • 2017-12-01
        • 2016-06-23
        • 2016-07-16
        • 2018-11-09
        • 1970-01-01
        相关资源
        最近更新 更多