在master已经分叉了工作者并且现在想要开始向工作进程发送消息之后,是否在发送消息之前指定了一个工作者传递消息的唯一方法? documentation建议如此。
const worker = cluster.fork();
worker.send('hi there');
如果是,那么scheduling policy到底是什么?有没有办法我们可以:
master.sendToWorker('Hi there!');
并根据默认/配置的算法自动选择工作人员?
答案 0 :(得分:1)
调度策略用于处理传入连接。如果您有3个表达应用程序的工作程序,则当用户连接时,只有一个工作程序将处理该请求。默认情况下,它可以是Round Robin,也可以是OS的选择。所以这并没有给你很大的灵活性。
现在,这对我们的请求没有帮助,即从主服务器发送消息。正确的解决方案取决于您要发送的邮件的性质。
如果要发送消息以使工作人员启动任务,则消息可能不是最佳解决方案,您可能希望使用作业队列。但是,如果您仍然希望使用消息,您的主人可以简单地记下可用的工作人员并随意将消息发送给免费工作人员,将其从可用工作人员中移除,直到报告完成为止。
您可以简单地使用循环实现,在一行代码中看起来像这样:
workersList[++messageCount%workersList.length].send("message");
如果您想使用本机策略,您可以让您的工作人员侦听特定端口并让您的主人向localhost上的该端口发送消息,它应该可以工作,但您必须实现自己的消息传递系统...
IMO,如果您想发送消息,您就知道要将其发送给谁。如果要向“随机”收件人发送邮件,可能是因为邮件可能不适合与该方案进行通信。