集群(Cluster)

稳定度:2 - 稳定

Node.js 的单个实例在单线程中运行。为了充分利用多核系统的用户有时想要启动 Node.js 进程的集群来处理负载。

集群模块可以使你轻松创建共享所有服务器端口的子进程。

  1. const cluster = require('cluster');
  2. const http = require('http');
  3. const numCPUs = require('os').cpus().length;
  4. if (cluster.isMaster) {
  5. // Fork workers.
  6. for (var i = 0; i < numCPUs; i++) {
  7. cluster.fork();
  8. }
  9. cluster.on('exit', (worker, code, signal) => {
  10. console.log(`worker ${worker.process.pid} died`);
  11. });
  12. } else {
  13. // Workers can share any TCP connection
  14. // In this case it is an HTTP server
  15. http.createServer((req, res) => {
  16. res.writeHead(200);
  17. res.end('hello world\n');
  18. }).listen(8000);
  19. }

运行 Node.js,现在所有的工作进程会共享 8000 端口:

  1. $ NODE_DEBUG=cluster node server.js
  2. 23521,Master Worker 23524 online
  3. 23521,Master Worker 23526 online
  4. 23521,Master Worker 23523 online
  5. 23521,Master Worker 23528 online

请注意,在 Windows 平台上,目前还不可以在一个工作进程中设置一个已命名的 pipe 服务器。