模块说明
1.cluster模块底层使用child_process.fork() 2.多核 CPU 环境负载均衡,根据 CPU 核数衍生多次主应用进程 3.扩展性克隆,主进程通过调度轮询算法去选择一个工作进程 4.搭配os模块方法,cpus()获取cpu核心数,来决定开多少进程
| 属性 | 描述 |
|---|---|
| isMaster | 布尔,true:当前进程是主进程 |
| isWorker | 布尔,true:当前进程是子进程 |
| workers | 数组,fork()方法创建的所有子进程 注:第一个进程从1开始,例:workers[1] |
| 方法 | 描述 |
|---|---|
| fork() | 创建进程,每调用一次创建一个进程,默认当前文件,可指定文件 |
| on() | 绑定事件 |
| setupMaster() | 修改fork()方法默认运行文件 |
示例:多进程服务器
主进程:文件名 a.js
var cluster = require("cluster");
var os = require("os");
var cpu_num = os.cpus().length; //获取CPU核心数
cluster.on("exit", function(worker){ //子进程关闭时触发
console.log("子进程关闭" + worker.id);
});
cluster.on("fork", function(worker){ //监听所有子进程返回消息
worker.on("message", function(data){
console.log(data.s);
});
});
cluster.setupMaster({exec:"b.js"}); //设置子进程运行文件
for(var i = 0; i<cpu_num; i++) cluster.fork(); //根据CPU核心数,开启子进程
子进程:文件名 b.js
process.send({s: "我是子进程" + process.pid}); //向主进程发送数据
process.exit(0); //关闭子进程