我很难理解这段代码:
const cluster = require('cluster');
const http = require('http');
const numCPUs = require('os').cpus().length;
if (cluster.isMaster) {
console.log(`Master ${process.pid} is running`);
// Fork workers.
for (let i = 0; i < numCPUs; i++) {
cluster.fork();
}
cluster.on('exit', (worker, code, signal) => {
console.log(`worker ${worker.process.pid} died`);
});
} else {
// Workers can share any TCP connection
// In this case it is an HTTP server
http.createServer((req, res) => {
res.writeHead(200);
res.end('hello world\n');
}).listen(8000);
console.log(`Worker ${process.pid} started`);
}
我不明白parent和worker之间的关系。父进程生成子进程并等待它们,但是如何在工作进程(子进程)之间分配负载
在子进程中,多个进程如何绑定(bind)到同一端口?
最佳答案
我不确定你是否读过这篇文章。有一个美丽的解释。
https://nodejs.org/dist/latest/docs/api/cluster.html#cluster_how_it_works
简而言之,cluster 模块会处理这个问题。您不必担心这一点。
多个进程未绑定(bind)到同一端口
方法1(循环法 - 默认,Windows 除外):
Master Primary 绑定(bind)到端口,监听并接受传入连接,并将工作分配给slaves 工作人员,并通过 ipc 套接字进行通信
在这里,每个 worker 都有平等的机会承担工作量。
方法 2(非平衡方法):
Primary 绑定(bind)到端口(记住,它不接受连接),并且监听套接字被共享给工作进程。
现在,工作人员有责任接受连接并处理请求。
这里由底层操作系统在进程之间分配工作。如果工作量很小,则大多数情况下是同一工作人员接受大多数连接并完成工作。
关于node.js - Nodejs 集群模块 - 在监听套接字时如何工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41783304/