Nodejs集群模块 - 在侦听套接字时如何工作

时间:2017-01-21 19:05:05

标签: node.js worker

我对理解这段代码有些困难:

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`);
}

我不明白父母和工人之间的关系。父进程生成子进程并等待它们,但是如何在worker(children)之间分配负载

在子进程中,多个进程如何绑定到同一个端口?

1 个答案:

答案 0 :(得分:2)

我不确定你是否读过这篇文章。这是一个很好的解释。
https://nodejs.org/dist/latest-v6.x/docs/api/cluster.html#cluster_how_it_works
简单地说,集群模块将负责这一点。你不用担心这个。

多个进程未绑定到同一端口

Method1(循环法 - 除Windows外的默认值):
Master绑定到端口,侦听并接受传入连接,它将工作分配给从属,并通过ipc套接字进行通信
在这里,每个奴隶都有平等的工作量。

方法2(不平衡方法):
Master必须端口(记住,它不接受连接)并且侦听套接字与从进程共享。
现在,奴隶有责任接受连接并处理请求。
在这里,它可以通过底层操作系统在整个流程中分配工作。这是由OS完成的公平调度。如果工作量很小,那么大多数时候它都是做同事的奴隶。