2014-01-30 3 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 - один из методов работы здесь.

я думаю, что все, что вам нужно что-то я уже сделал и опубликовал в НПМ реестре:

кластер-обертка:

various-cluster

обмена сообщениями между рабочими:

msghub

репозитории github связаны, взгляните на код или просто используйте оба модули ;-)

+0

+1 для конфигурационного трюка, я никогда не слышал об этом и просто замечателен для моего использования. Онлайн-мероприятие не будет работать для моего дела, так как на 4 разных кодах только один на самом деле использует интернет, так что мне не помогают. Ваши модули кажутся интересными, но я не могу использовать сторонний код в этом проекте (по той же причине я не могу показать код). – DrakaSAN

+0

нет +1 klicked по моему ответу ;-) Я тоже отлично разбираюсь или даже копирую часть моего кода, что должно помочь вам много, я думаю ... – hereandnow78

+1

Doh! Просто начал адаптировать мои коды к конфигу и увидел, что код, который не получил сообщение, был таким, потому что я каким-то образом смешивал свое событие с событием сообщения. Я отвечу на ваш ответ, так как это было бы лучше, если бы я был на индивидуальном проекте. – DrakaSAN

Смежные вопросы