node.js - Nodejs 集群模块 - 在监听套接字时如何工作

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

我不明白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/

相关文章:

node.js - Web Audio API 在播放时通过 http 流式传输音频标签

c# - 填充 UI 时显示请稍候动画

php - 让 SQS 工作人员了解时区

heroku - 在 Yii2-Heroku 中设置一个 worker

amazon-web-services - Amazon SQS 如何控制重试次数

ruby-on-rails - 为什么在 worker 运行时Resque显示 “0 out of 0 Workers Working”?没有工作被捡起

node.js - 抓取并迭代没有类的 html 表

node.js - 区分同一位置的请求参数?

node.js - 如何使用node.js发布页面

javascript - Ldapjs 等待搜索完成