2014-01-30 39 views
0

我使用群集库启动不同的代码。确保收到发送的群集消息

主分叉,然后发送一条消息到群集与文件开始,然后require()并开始。

我已经做出了不同的奴隶的process.send()重定向,让他们沟通。

我的问题是,我有一个很长的代码开始,并应该从另一个代码接收消息才能正确启动。问题是,由于它没有在时间开始,因此process.on('message')尚未加载,因此消息丢失。

有没有办法知道什么时候发生,所以我可以尝试再次发送它?

.________.-------------------------------. 
| master |<--------------------. message | 
|________|      |   | 
| | start      |   | 
| |_________________________. |   | 
|       | |   | 
V       V |  /
.______.     ._______. /Lost because long didn t load at time 
| long |     | short |  | 
|______|     |_______|  | 
^         | 
    |______________________________________| 

回答

1

你不需要发送一条消息给你的工作人员,你告诉他们哪个文件开始。你可以只添加一个配置,而分叉:

cluster.fork('yourConfig': {"fileToStart": "someFileName"}) 

,然后在你的工人:

var config = JSON.parse(process.env.yourConfig) 
require(config.fileToStart); 

这里也是possibilty得到一个“在线”事件,当一个新的工作分叉。所以你需要做的就是在工作人员不在线时不要向你的员工发送一条消息,只需排队这些消息,并在你的员工在线时发送消息。 cluster.workers是在这里使用的方法之一。

我认为,所有你需要的是什么我已经完成并发布到NPM-注册表:

簇包装:

various-cluster

工人之间的信息:

msghub

回购链接GitHub的,看看代码,或者只是使用这两种模块;-)

+0

+ 1的配置技巧,我从来没有听说过,这只是我的使用的美妙。这个在线活动并不适合我的情况,因为在4种不同的代码中,只有一种实际上使用互联网,所以不会帮助我很多。你的模块看起来很有趣,但我不能在这个项目上使用第三方代码(出于同样的原因我不能显示代码)。 – DrakaSAN

+0

在我的答案中没有+1 klicked ;-)我也很好,学习甚至复制我的代码的一部分,这应该会帮助你很多我认为... – hereandnow78

+1

Doh!刚开始让我的代码适应配置,并看到没有收到消息的代码是这样,因为我以某种方式混合了我的开始事件和消息事件。我会接受你的回答,因为如果我是个人项目,这将是最好的。 – DrakaSAN

相关问题