Nodejs 集群模块 - 在监听套接字时它是如何工作的
Nodejs cluster module - How it works while listening on sockets
我理解这段代码有些困难:
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 和工人之间的关系。 parent 生成 children 进程并等待它们,但是负载如何在 workers (children)
之间分配
在child的进程中,多个进程如何绑定到同一个端口?
我不确定你是否读过这篇文章。有一个美丽的解释。
https://nodejs.org/dist/latest/docs/api/cluster.html#cluster_how_it_works
简单地说,cluster 模块会处理这个。这个你不用担心。
多个进程未绑定同一个端口
方法 1(循环方法 - 默认值 windows 除外):
Master Primary 绑定到端口,侦听并接受传入连接 并将工作分配给 slaves工作人员和通信通过 ipc 套接字发生
在这里,每个工人都有平等的工作机会。
方法二(不平衡法):
Primary 绑定到端口(记住,它不接受连接)并且侦听套接字共享给工作进程。
现在,工人有责任接受连接并处理请求。
这里由底层 OS 来跨进程分配工作。如果工作很小,大多数情况下是同一个工作人员接受最多的连接并完成工作。
我理解这段代码有些困难:
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 和工人之间的关系。 parent 生成 children 进程并等待它们,但是负载如何在 workers (children)
之间分配在child的进程中,多个进程如何绑定到同一个端口?
我不确定你是否读过这篇文章。有一个美丽的解释。
https://nodejs.org/dist/latest/docs/api/cluster.html#cluster_how_it_works
简单地说,cluster 模块会处理这个。这个你不用担心。
多个进程未绑定同一个端口
方法 1(循环方法 - 默认值 windows 除外):
Master Primary 绑定到端口,侦听并接受传入连接 并将工作分配给 slaves工作人员和通信通过 ipc 套接字发生
在这里,每个工人都有平等的工作机会。
方法二(不平衡法):
Primary 绑定到端口(记住,它不接受连接)并且侦听套接字共享给工作进程。
现在,工人有责任接受连接并处理请求。
这里由底层 OS 来跨进程分配工作。如果工作很小,大多数情况下是同一个工作人员接受最多的连接并完成工作。