Ho lavorare (magazzino) script da nodeNodeJS | Cluster: come inviare dati dal master a tutti o a un bambino/lavoratore?
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);
}
Nello script precedente posso inviare i dati dal lavoratore di processo principale con facilità. Ma come inviare dati dal master al lavoratore/lavoratore? Con esempi, se possibile.
Sì, funziona, grazie! In altre parole: mentre forking i lavoratori dovrei archiviarli in un array. E itera questa matrice per inviare dati a ogni bambino. È l'altro modo per inviare dati a tutti i lavoratori senza memorizzazione e iterazione. – htonus
Se non si desidera archiviare i lavoratori in un array e iterare attraverso di essi per inviare messaggi, è possibile utilizzare un socket dominio unix per comunicare i messaggi dal master ai lavoratori. – alessioalex
Suppongo che tu possa creare EventEmitter nel master, emettere un evento ogni volta che viene ricevuto un messaggio. Dopo la creazione di ciascun lavoratore, è sufficiente aggiungere un listener all'EventEmitter che invierà il messaggio all'operatore. Naturalmente questo è ancora implementato memorizzando i riferimenti degli ascoltatori (quindi anche dell'operatore) nell'EventEmitter, ma hey, almeno non è necessario guardarlo – cheng81