nodejs实现多进程(cluster 模式)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了nodejs实现多进程(cluster 模式)相关的知识,希望对你有一定的参考价值。

参考技术A Nodejs的主进程是单线程的,但它有多线程处理方案(更准备来说是多进程方案),即主进程开启不同的子进程,主进程接收所有请求,然后将分发给其它不同的nodejs子进程处理。

它一般有两种实现:

Nodejs 的 cluster模式 用的就是第一种实现,它使用一个主线程 master 和多个子线程 worker ,形成一个集群,通过主线程来向子线程分发请求。cluster 实现了对 child_process 的封装,通过 fork 方法创建子进程的方式实现了多进程模型。

http 和 cluster 、 process 都是 nodejs 的内置模块,不需要额外安装

实现过程大概是这样的: cluster 模块应用 child_process 来创建子进程,子进程通过复写掉 cluster._getServer 方法,从而在 server.listen 来保证只有主进程监听端口,主子进程通过 IPC 进行通信,其次主进程根据平台或者协议不同,应用两种不同模块( round_robin_handle.js 和 shared_handle.js )进行请求分发给子进程处理。

PM2是后台进程管理器,是多进程方案的一个成熟应用,可以帮助管理和保持应用程序在线。

全局安装: npm install pm2@latest -g
它的使用也非常简单:

PM2对nodejs应用,可以根据系统自动实现负载均衡: pm2 start http-server.js -i max

我们肯定不想每次启动时,都要手动输入一堆指令,所以我们可以将这些配置统一使用配置文件来管理,注意js文件名必须是 xxx.config.js ,我这里用 ecosystem.config.js :
apps 数组中,可以放置多个对象,对应多个文件执行不同的配置

执行配置: pm2 start ecosystem.config.js --env dev

可以看到在启动后,桌面上生成了流水和错误日志:

以上是关于nodejs实现多进程(cluster 模式)的主要内容,如果未能解决你的问题,请参考以下文章

NodeJs多线程、多进程、定时任务

nodejs原理&源码赏析深度剖析cluster模块源码与node.js多进程(上)

nodejs中的子进程,深入解析child_process模块和cluster模块

多线程和多进程效率的对比

多进程程序设计,王明学learn

100天精通Python(进阶篇)——第38天:多进程文末送书三本