я работаю (складочном) скрипт nodeNodeJS | Кластер: Как отправить данные от мастера ко всем или одному ребенку/работникам?
var cluster = require('cluster');
var http = require('http');
var numReqs = 0;
if (cluster.isMaster) {
// Fork workers.
for (var i = 0; i < 2; i++) {
var worker = cluster.fork();
worker.on('message', function(msg) {
if (msg.cmd && msg.cmd == 'notifyRequest') {
numReqs++;
}
});
}
setInterval(function() {
console.log("numReqs =", numReqs);
}, 1000);
} else {
// Worker processes have a http server.
http.Server(function(req, res) {
res.writeHead(200);
res.end("hello world\n");
// Send message to master process
process.send({ cmd: 'notifyRequest' });
}).listen(8000);
}
В приведенном выше сценарии я могу отправить данные от рабочего до главного процесса с легкостью. Но как отправить данные от мастера к работнику/работникам? С примерами, если это возможно.
Да, это работает, спасибо! Другими словами: при работе с рабочими я должен хранить их в массиве. И итерации этого массива для отправки данных каждому ребенку. Есть ли другой способ отправить данные всем работникам без сохранения и итерации. – htonus
Если вы не хотите хранить рабочих в массиве и перебирать их для отправки сообщений, вы можете использовать сокет домена unix для передачи сообщений от мастера к работникам. – alessioalex
Я предполагаю, что вы можете создать EventEmitter в главном устройстве, и они будут генерировать событие всякий раз, когда будет получено сообщение. После создания каждого рабочего вам просто нужно добавить слушателя к EventEmitter, который отправит сообщение работнику. Конечно, это все еще реализовано, сохраняя ссылки слушателей (таким образом, и рабочего) в EventEmitter, но эй, по крайней мере, вам не нужно смотреть на него. – cheng81