我使用集群库来启动不同的代码。
主分支,然后向群集发送一条消息,其中包含要启动的文件,然后require()
并启动。
我已经对不同的process.send()
奴隶进行了重定向,以允许他们进行交流。
我的问题是,我有一个很难启动的代码,并且应该从另一个代码接收消息以正确启动。问题是,由于它没有在时间开始,process.on('message')
没有加载,因此消息丢失。
有没有办法知道什么时候发生,所以我可以尝试再发一次?
.________.-------------------------------.
| master |<--------------------. message |
|________| | |
| | start | |
| |_________________________. | |
| | | |
V V | /
.______. ._______. / Lost because long didn t load at time
| long | | short | |
|______| |_______| |
^ |
|______________________________________|
答案 0 :(得分:1)
您不需要向工作人员发送消息,告诉他们要从哪个文件开始。你可以在分叉时添加一个配置:
cluster.fork('yourConfig': {"fileToStart": "someFileName"})
然后在你的工作人员中:
var config = JSON.parse(process.env.yourConfig)
require(config.fileToStart);
当新员工分叉时,还有可能获得“在线”事件。所以你需要做的就是不在你的工作人员不在线时从你的主人那里发送消息,只是排队这些消息,并在你的工人在线时发送。 cluster.workers
是在这里使用的方法之一。
我认为你所需要的只是我已经完成并发布到npm-registry的内容:
cluster-wrapper:
工人之间的消息传递:
github repos是链接的,看一下代码,或者只使用两个模块; - )