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 来跨进程分配工作。如果工作很小,大多数情况下是同一个工作人员接受最多的连接并完成工作。