传统上我使用:
if (cluster.isMaster) {
cluster.fork();
cluster.on('exit', function(worker, code, signal) {
cluster.fork();
});
}
if (cluster.isWorker) {
...
}
设置工作人员但说如果我希望两台服务器在不同的端口上运行而没有一台服务器在发生错误时关闭另一台服务器,那么cluster
仅允许使用这种设置的方法可能是什么。
传统上我使用:
if (cluster.isMaster) {
cluster.fork();
cluster.on('exit', function(worker, code, signal) {
cluster.fork();
});
}
if (cluster.isWorker) {
...
}
设置工作人员但说如果我希望两台服务器在不同的端口上运行而没有一台服务器在发生错误时关闭另一台服务器,那么cluster
仅允许使用这种设置的方法可能是什么。
对于有不同工作要做的工人,根本不要使用集群。集群适用于共享一个端口的多个进程,传入的工作在集群中的所有进程之间进行负载均衡。
如果您想要一些其他工作人员做不同的工作,那么只需使用 child_process 模块以类似的方式启动您的工作人员child_process.fork()
,给他们不同的代码并使用您可用的任意数量的通信方法与工作人员进行通信。例如,每个工作人员都可以在其端口上启动自己的 http 服务器,然后您可以从该端口上的主进程与其通信。
这是一个简单的.fork()
示例,说明了使用进程消息在两者之间进行通信。您也可以使用许多其他通信机制。
父代码:
const { fork } = require('child_process');
const forked = fork('child.js');
forked.on('message', (msg) => {
console.log('Message from child', msg);
});
forked.send({ hello: 'world' });
子代码:
process.on('message', (msg) => {
console.log('Message from parent:', msg);
});
let counter = 0;
setInterval(() => {
process.send({ counter: counter++ });
}, 1000);