0

0

如何利用Node.js的Cluster模块实现多进程应用?

幻影之瞳

幻影之瞳

发布时间:2025-10-04 17:50:01

|

718人浏览过

|

来源于php中文网

原创

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

如何利用node.js的cluster模块实现多进程应用?

Node.js 是单线程的,但可以利用 Cluster 模块 创建多个进程来充分利用多核 CPU,提升应用性能和稳定性。通过主进程(Master)管理多个工作进程(Worker),每个 Worker 独立运行实例,共享同一个端口,实现负载均衡。

Cluster 模块的基本原理

Cluster 模块允许你创建多个子进程(Worker),这些进程都监听同一个端口。主进程负责启动并监控 Worker 进程。当有新的连接到来时,主进程会将连接分发给某个空闲的 Worker,从而实现高效的并发处理。

关键点:

  • 主进程不处理请求,只负责管理和重启 Worker
  • 每个 Worker 是一个独立的 Node.js 实例,拥有自己的事件循环
  • 所有 Worker 共享同一组 TCP 连接(如 HTTP 服务器端口)

创建一个多进程 HTTP 服务

以下是一个使用 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 是独立的,不能直接共享内存。如果需要通信,可通过主进程中转:

PHPB2B
PHPB2B

PHP-B2B(原友邻b2b)是一套能够帮助用户,快速建立高效、多功能电子商务网站的php应用程序,本程序采用目前互联网上最流行的LAMP组合(Linux+Apache+Mysql+PHP)开发完成,同时利用Smarty模板技术实现了网站前台与后台的有效分离,用户可以快速地在此基础上开发自己的模板。 友邻php提供了电子商务应用最常见求购、供应、商品、公司库等模块,同时为企业用户提供了一个发布信

下载
  • Worker 使用 process.send() 发送消息
  • 主进程通过 cluster.on('message') 接收
  • 主进程可转发消息给特定 Worker

例如,在 Worker 中发送信息:

// 在 Worker 内部 process.send({ type: 'log', data: 'Worker 处理了请求' });

在主进程中监听:

cluster.on('message', (worker, message) => { console.log(`来自 Worker ${worker.id}:`, message); });

错误处理与进程健壮性

Worker 崩溃不会导致整个应用宕机。主进程能检测退出并重启新实例,提高可用性。

  • 监听 'exit' 事件判断是否异常退出
  • 避免频繁重启(如 1 秒内多次崩溃),可加入延迟或限制机制
  • 记录日志有助于排查问题

建议生产环境中结合 PM2 等进程管理工具,提供更完善的监控、日志和热重载功能。

基本上就这些。用好 Cluster 模块,能让 Node.js 应用真正发挥服务器多核优势。

相关专题

更多
if什么意思
if什么意思

if的意思是“如果”的条件。它是一个用于引导条件语句的关键词,用于根据特定条件的真假情况来执行不同的代码块。本专题提供if什么意思的相关文章,供大家免费阅读。

771

2023.08.22

require的用法
require的用法

require的用法有引入模块、导入类或方法、执行特定任务。想了解更多require的相关内容,可以阅读本专题下面的文章。

466

2023.11.27

c语言const用法
c语言const用法

const是关键字,可以用于声明常量、函数参数中的const修饰符、const修饰函数返回值、const修饰指针。详细介绍:1、声明常量,const关键字可用于声明常量,常量的值在程序运行期间不可修改,常量可以是基本数据类型,如整数、浮点数、字符等,也可是自定义的数据类型;2、函数参数中的const修饰符,const关键字可用于函数的参数中,表示该参数在函数内部不可修改等等。

527

2023.09.20

length函数用法
length函数用法

length函数用于返回指定字符串的字符数或字节数。可以用于计算字符串的长度,以便在查询和处理字符串数据时进行操作和判断。 需要注意的是length函数计算的是字符串的字符数,而不是字节数。对于多字节字符集,一个字符可能由多个字节组成。因此,length函数在计算字符串长度时会将多字节字符作为一个字符来计算。更多关于length函数的用法,大家可以阅读本专题下面的文章。

923

2023.09.19

线程和进程的区别
线程和进程的区别

线程和进程的区别:线程是进程的一部分,用于实现并发和并行操作,而线程共享进程的资源,通信更方便快捷,切换开销较小。本专题为大家提供线程和进程区别相关的各种文章、以及下载和课程。

482

2023.08.10

js正则表达式
js正则表达式

php中文网为大家提供各种js正则表达式语法大全以及各种js正则表达式使用的方法,还有更多js正则表达式的相关文章、相关下载、相关课程,供大家免费下载体验。

510

2023.06.20

js获取当前时间
js获取当前时间

JS全称JavaScript,是一种具有函数优先的轻量级,解释型或即时编译型的编程语言;它是一种属于网络的高级脚本语言,主要用于Web,常用来为网页添加各式各样的动态功能。js怎么获取当前时间呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

244

2023.07.28

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

298

2023.08.03

c++ 根号
c++ 根号

本专题整合了c++根号相关教程,阅读专题下面的文章了解更多详细内容。

58

2026.01.23

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
WEB前端教程【HTML5+CSS3+JS】
WEB前端教程【HTML5+CSS3+JS】

共101课时 | 8.5万人学习

JS进阶与BootStrap学习
JS进阶与BootStrap学习

共39课时 | 3.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号