2014-01-30 37 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

相關問題