【发布时间】:2020-06-23 18:08:31
【问题描述】:
我正在尝试学习集群模块,但遇到了这段代码,我无法理解它。首先,它使用 child_process 模块分叉子进程,并在那里使用 cluster.fork().process ,我在 express web 服务器中分别使用了 cluster 模块和 child_process 我知道 cluster 模块可以用作负载平衡器。
但我不知道将它们一起使用。还有其他一些事情,集群正在侦听这些工作进程,并且当发出断开连接和可能的退出事件来主控时,它会重新分叉一个进程,但这里的问题是让我们假设电子邮件工作人员崩溃并且主控将再次分叉它它怎么知道它应该分叉电子邮件?我的意思是它不应该传递一个我在这段代码中看不到的 id。
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);
}
【问题讨论】:
标签: node.js fork cluster-computing child-process