全部学科
Python全栈
python
NodeJS全栈
nodejs
小程序首页
📅 2026-05-15 8 分钟 ✍️ juanwangdev

Node.js 集群 (cluster) 模块

cluster 模块用于创建多进程应用,突破单线程限制,充分利用多核 CPU。

核心概念

工作原理

角色说明
Master 进程主进程,负责管理 Worker
Worker 进程工作进程,处理实际请求

判断进程类型

JavaScript
const cluster = require('cluster');

if (cluster.isMaster) {
  // 主进程逻辑
  console.log('主进程启动');
} else {
  // 工作进程逻辑
  console.log('工作进程启动');
}

创建集群

基本用法

JavaScript
const cluster = require('cluster');
const http = require('http');
const numCPUs = require('os').cpus().length;

if (cluster.isMaster) {
  // 根据 CPU 核心数创建工作进程
  for (let i = 0; i < numCPUs; i++) {
    cluster.fork();
  }

  cluster.on('exit', (worker, code, signal) => {
    console.log(`工作进程 ${worker.process.pid} 退出`);
    cluster.fork(); // 自动重启
  });
} else {
  http.createServer((req, res) => {
    res.writeHead(200);
    res.end(`进程 ${process.pid} 响应\n`);
  }).listen(8000);
}

进程间通信

JavaScript
// 主进程
if (cluster.isMaster) {
  const worker = cluster.fork();

  worker.send({ type: 'config', data: 'settings' });

  worker.on('message', (msg) => {
    console.log('收到 Worker 消息:', msg);
  });
}

// 工作进程
process.on('message', (msg) => {
  console.log('收到 Master 消息:', msg);
  process.send({ reply: 'ok' });
});

常用事件

JavaScript
cluster.on('fork', (worker) => {
  console.log(`工作进程 ${worker.id} 已创建`);
});

cluster.on('online', (worker) => {
  console.log(`工作进程 ${worker.id} 已上线`);
});

cluster.on('listening', (worker, address) => {
  console.log(`工作进程 ${worker.id} 监听 ${address.port}`);
});

cluster.on('disconnect', (worker) => {
  console.log(`工作进程 ${worker.id} 断开连接`);
});

cluster.on('exit', (worker, code, signal) => {
  console.log(`工作进程 ${worker.id} 退出,代码: ${code}`);
});

Worker 对象方法

JavaScript
const worker = cluster.fork();

worker.send('消息');       // 发送消息
worker.disconnect();       // 断开连接
worker.kill();             // 终止进程
worker.isDead();           // 是否已终止
worker.isConnected();      // 是否连接中

注意事项

  • 所有 Worker 共享同一个端口,由 Master 分发请求
  • 默认使用轮询(round-robin)负载均衡策略
  • Worker 崩溃后应重启,保证服务稳定
  • 共享内存需使用 Redis 或 IPC 通信

要点总结

  • cluster.isMaster/isWorker 判断进程角色
  • cluster.fork() 创建工作进程
  • Worker 数量建议等于 CPU 核心数
  • 通过 worker.send()process.on('message') 通信
  • 监听 exit 事件实现自动重启

📝 发现内容有误?点击此处直接编辑

← 上一篇 Node.js 进程与 child_process
下一篇 → Node.js child_process模块
想查看更多题目和详细解析?
小程序提供完整的题库、模拟考试和详细解析
马上就来

长按或扫描二维码,立即体验

扫码体验小程序
马上就来
使用微信扫描二维码
立即体验完整题库