Node.js通过Cluster模块创建多进程实现多核利用,主进程管理并监控工作进程,各Worker独立运行、共享端口,由主进程分发连接实现负载均衡;每个Worker为独立实例,通过IPC通信,主进程可监听消息与错误,异常时重启保障稳定性,建议生产环境结合PM2增强运维能力。

Node.js 是单线程的,但可以利用 Cluster 模块 创建多个进程来充分利用多核 CPU,提升应用性能和稳定性。通过主进程(Master)管理多个工作进程(Worker),每个 Worker 独立运行实例,共享同一个端口,实现负载均衡。
Cluster 模块允许你创建多个子进程(Worker),这些进程都监听同一个端口。主进程负责启动并监控 Worker 进程。当有新的连接到来时,主进程会将连接分发给某个空闲的 Worker,从而实现高效的并发处理。
关键点:
以下是一个使用 Cluster 模块启动多个 Worker 的示例:
const cluster = require('cluster'); const http = require('http'); const os = require('os'); const numCPUs = os.cpus().length; if (cluster.isMaster) { console.log(`主进程 ${process.pid} 正在运行`); // 衍生与 CPU 核心数相同的 Worker 进程 for (let i = 0; i { console.log(`Worker 进程 ${worker.process.pid} 已退出`); console.log('正在重启新的 Worker...'); cluster.fork(); }); } else { // Worker 进程:创建 HTTP 服务器 http.createServer((req, res) => { res.writeHead(200); res.end('Hello from Worker ' + process.pid); }).listen(3000); console.log(`Worker ${process.pid} 已启动,监听 3000 端口`); }运行此代码后,你会看到多个 Worker 同时监听 3000 端口,系统自动分配请求到不同进程。
每个 Worker 是独立的,不能直接共享内存。如果需要通信,可通过主进程中转:
例如,在 Worker 中发送信息:
// 在 Worker 内部 process.send({ type: 'log', data: 'Worker 处理了请求' });在主进程中监听:
cluster.on('message', (worker, message) => { console.log(`来自 Worker ${worker.id}:`, message); });Worker 崩溃不会导致整个应用宕机。主进程能检测退出并重启新实例,提高可用性。
建议生产环境中结合 PM2 等进程管理工具,提供更完善的监控、日志和热重载功能。
基本上就这些。用好 Cluster 模块,能让 Node.js 应用真正发挥服务器多核优势。以上就是如何利用Node.js的Cluster模块实现多进程应用?的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号