У меня есть приложение, развернутое в кластере Nodejs, где мастер-вилки рабочих. Рабочие выполняют некоторые действия с базой данных (которые могут занять некоторое время), а затем должны отправить некоторый результат обратно мастеру. Вот скелет того, что у меня есть. Когда я запускаю это, некоторые из сообщений от рабочих не принимаются мастером. Как я могу заставить мастера ждать, пока он не получит сообщения от всех рабочих.
if ( isMaster ) {
for(k=0; k<nodes; k++)
{
cluster.fork();
console.log("Started Node-" + k);
}
for (const id in cluster.workers) {
var worker = cluster.workers[id];
worker.on('exit', () => {
console.log('worker', id . ' Exited');
});
worker.on('message', (msg) => {
console.log ("msg recvd by id:", id, 'msg:', msg);
consumeMsg(msg);
});
} else { // isWorker
// do some database work, potentially long running (in tens of seconds)
.....
process.send( { results: dbResults, ID: cluster.worker.id} );
}