node是单线程,每个应用的最大内存为1GB,为了利用系统的多核,node提供了cluster模块来创建多个node应用,本文是让socket.io利用多核
实现思路:创建一个master进程(管理工作进程)和多个worker进程(工作进程),连接来了后,由master进程计算并分发请求到指定的worker进程,并且每次相同ip的请求到达后,都由相同的worker进程处理
下面剖析代码:
/**
* create by dalgurak 2018/8/24
*/
/* global process:true global:true*/
import cluster from 'cluster';
import http from 'http';
import net from 'net';
import socketIo from 'socket.io';
if (cluster.isMaster) {
let workers = []; // worker进程容器
let numCPUs = 3; // 这里表示开启三个worker进程
let spawn = function (i) {
workers[i] = cluster.fork(); // 创建一个worker工作进程并放进容器
workers[i].on('exit', (code, signal) => { // 监听worker进程断开事件
console.log(`worker ${i} died, code:${code}, signal:${signal}`);
spawn(i); // worker挂掉之后重启进程
});
}
// fork workers 创