nodejs集群消息传递vs websockets

时间:2014-12-23 21:45:03

标签: node.js websocket

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

我有3个问题。 1。为了更快的过程,我可以在没有主人的工人之间发送消息吗?

  1. 最好在每个工作人员上打开一个websocket,以便从其他工作人员那里听取替换群集中的内置消息,是否更快?

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

2 个答案:

答案 0 :(得分:1)

  1. 否。通常,子进程彼此不了解。他们只知道父母。
  2. 它不是更快,它肯定更慢。它可能会更好,因为你不能扩展到多台机器上(集群只创建子进程)。根据您的需要。
  3. 以zeromq为例(我确定NodeJS有绑定,google)。或者是专用的消息代理(如RabbitMQ)。这些是为了解决你的特殊问题而创建的,与websockets不同。

答案 1 :(得分:0)

IPC。

每个NodeJS子进程(以fork开始)具有;WITH cte AS ( SELECT '["' + REPLACE(COALESCE(d.StringValue,''),'^','","') + '"]' AS [JSONValue] ,ROW_NUMBER()OVER(ORDER BY d.StringValue) AS [ID] FROM #Data d ) SELECT NULLIF(a.value,'') AS [Value] FROM ( SELECT j.value,ROW_NUMBER()OVER(PARTITION BY c.ID ORDER BY j.[key] DESC) AS [rn] FROM cte AS c CROSS APPLY OPENJSON(c.JSONValue) j ) a WHERE a.rn = 1 ; 方法。并且可以侦听来自父母的消息。如果需要,可以随意传递对象。它将被字符串化并在另一侧进行解析。

process.send(<data>);

当您在父端分支进程时-它也具有消息传递方法。

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

如果要使工作人员/孩子之间相互通信-您可以通过向主服务器发送特定消息来进行管理,然后主服务器会将其转发给指定的工作人员。

文档:Child Process Event "Message"