//cluster模块子进程内置共享端口
const express = require('express')
const cluster = require('cluster')
if (cluster.isMaster) {
//处理主进程逻辑
console.log(`主进程 ${process.pid} 启动,开始分配任务`)
// 创建工作进程
for (let i = 0; i < require('os').cpus().length; i++) {
cluster.fork()
}
// 监听子进程退出事件
cluster.on('exit', (worker, code, signal) => {
console.log(`****子工作进程 ${worker.process.pid} 已退出,现在进程数为${Object.keys(cluster.workers).length},将开启新的进程****`)
cluster.fork()
})
// 监听子进程消息
// cluster.on('message', (worker, message) => {
// if (message.type === 'taskCompleted') {
// console.log(`子进程${message.pid}已完成`);
// }
// })
} else {
//处理子进程逻辑
childProcess();
}
function childProcess () {
//process.send({ type: 'taskCompleted', pid: process.pid });向主进程发送消息
const app = express()
//搭建一级路由
app.use('/', (req, res) => {
res.header('Access-Control-Allow-Origin', '*')//解决跨域
console.log(process.pid + '子进程正在处理服务')
res.send({ msg: 'eeee' })
})
//设置端口
app.listen(3000, () => {
console.log(process.pid + ' express服务启动成功')
})
}