Я пытаюсь изучить модуль кластера, и я наткнулся на этот кусок кода, я просто не могу сообразить его. Сначала он разветвляет childs с модулем child_process, и там он использует процесс cluster.fork (). Я использовал и модуль кластера, и child_process на отдельном веб-сервере express. Я знаю, что модуль кластера работает с балансировщиком нагрузки.
Но я не могу понять, как использовать их вместе. и еще кое-что, кластер слушает этот рабочий процесс, и когда когда-либо происходит событие разъединения и, возможно, выхода, чтобы освоить, он повторно обрабатывает процесс, но вот вопрос, позволяющий предположить, что работающий по электронной почте сбой, и мастер собирается снова его разветвлять откуда он знает, что должен разветвляться? Я имею в виду, не должен ли он передавать идентификатор, который я не могу видеть в этом коде.
var cluster = require("cluster");
const numCPUs = require("os").cpus().length;
if (cluster.isMaster) {
// fork child process for notif/sms/email worker
global.smsWorker = require("child_process").fork("./smsWorker");
global.emailWorker = require("child_process").fork("./emailWorker");
global.notifiWorker = require("child_process").fork("./notifWorker");
// fork application workers
for (var i = 0; i < numCPUs; i++) {
var worker = cluster.fork().process;
console.log("worker started. process id %s", worker.pid);
}
// if application worker gets disconnected, start new one.
cluster.on("disconnect", function(worker) {
console.error("Worker disconnect: " + worker.id);
var newWorker = cluster.fork().process;
console.log("Worker started. Process id %s", newWorker.pid);
});
} else {
callback(cluster);
}