我正在开发一个带有nodeJS和集群的应用程序,每个worker上有多个具有不同端口的工作线程,我可能需要让工作线程相互通信,我知道nodeJS集群内置了对主节点和其他工作线程之间的消息传递的支持。
我对此有3个问题。1 .我可以在没有主节点的工人之间发送消息以在中间,以加快流程吗?
- 在每个工作线程
上打开一个 websocket 以侦听其他工作线程以替换集群中的内置消息传递是否更好,速度更快吗?
如果该应用程序可以扩展到多个服务器,我认为 websocket 将是答案,请提出任何替代方案?
- 不。通常,子进程彼此不认识。他们只知道父母。 它
- 不是更快,它肯定更慢。不过可能会更好,因为否则您将无法扩展到多台计算机(群集仅创建子进程)。根据您的需求。
- 例如,尝试zeromq(我确定NodeJS有一个绑定,谷歌一下)。或者一个专用的消息代理(如 RabbitMQ)。这些是为了解决您的特定问题而创建的,与 websocket 不同。
IPC。
每个 NodeJS 子进程(从 fork 开始)都有process.send(<data>);
方法。并且可以侦听来自父母的消息。如果需要,可以随意传递对象。它将在另一端进行字符串化和解析。
process.on('message', (data) => {});
当您在父端分叉进程时 - 它还具有消息传递方法。
const child = child_process.fork('child.js');
child.on('message', (data) => { });
如果你想让工作线程/子节点相互通信 - 你可以通过向 master 发送特定消息来管理它,master 会将其转发给指定的 worker 。
文档:子进程事件"消息"