欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 新车 > Node.js项目开启多进程的2种方案

Node.js项目开启多进程的2种方案

2025/5/16 0:08:38 来源:https://blog.csdn.net/qq_31851435/article/details/147203490  浏览:    关键词:Node.js项目开启多进程的2种方案

当node项目只部署一个单进程单实例时,遇到异常发生后程序会崩溃,此时杀掉进程在重启单这段时间会导致服务不能正常使用,这显然会影响用户体验。

所以需要以多进程的模式去部署应用,这样当某一个进程发生异常重启时,此时有其他请求被接受后,其他进程依旧可以对外提供服务,当然前提是你的应用不能够异常多的数不过来。

一、在Node.js应用中使用cluster模块

1、Cluster 核心机制

原理‌:主进程(Master)创建多个子进程(Worker),共享同一个 TCP 端口,Master 通过 Round-robin 算法分配请求。

优势‌:

  • 多核 CPU 利用率提升 200%~300%
  • 高并发场景下请求处理能力翻倍
  • 单个 Worker 崩溃时自动重启保障服务可用性

通过合理使用 Cluster 模块,可使 Node.js 应用的并发处理能力提升 3 倍以上。建议通过压力测试工具(如 autocannon)验证实际性能提升效果。

2、基础使用

const cluster = require('cluster');
const http = require('http');
const numCPUs = require('os').cpus().length;// 主进程逻辑
if (cluster.isMaster) {console.log(`主进程 PID: ${process.pid}`);// 根据 CPU 核心数创建 Workerfor (let i = 0; i < numCPUs; i++) {cluster.fork();}// Worker 异常退出时自动重启cluster.on('exit', (worker, code, signal) => {console.log(`Worker ${worker.process.pid} 退出`);cluster.fork(); // 重新创建 Worker});// Worker 进程逻辑
} else {http.createServer((req, res) => {res.writeHead(200);res.end('请求由 Worker ' + process.pid + ' 处理');}).listen(3000);console.log(`Worker 进程 PID: ${process.pid} 已启动`);
}

关键 API 

cluster.isMaster判断当前进程是否为主进程
cluster.fork()创建新的 Worker 进程(最多建议创建 CPU 核心数 × 1.5 个)[^4]
cluster.on('exit')监听 Worker 退出事件
worker.process.pid获取 Worker 的进程 ID

3、进阶用法 

<

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词