Toggle navigation
VA伐木累
社区
VA伐木累
Proxy
JSON
BASE64
MyGit
登录
注册
×
登录
邮箱
密码
忘记密码?
NodeJS集群demo
•发布于
•作者
liuzy
•780 次浏览
•最后一次编辑是
•来自
技术
```js const os = require('os'); const http = require('http'); const cluster = require('cluster'); const cupNums = os.cpus().length; if (cluster.isMaster) { console.log(`主进程${process.pid}开始`); for (let i = 0; i < cupNums; i++) { let worker = cluster.fork(); worker.send({ do: 'start', data: worker.id, tip: `工人${worker.id}号,开始工作吧` }); } cluster.on('message', function(worker, message) { console.log(`[0-${process.pid}]: 收到[${worker.id}-${worker.process.pid}]的消息:`, message); }); cluster.on('online', function(worker) { console.log(`[0-${process.pid}]: 启动[${worker.id}-${worker.process.pid}]`); }); cluster.on('listening', function(worker, address) { console.log(`[0-${process.pid}]: [${worker.id}-${worker.process.pid}]正在监听 ${address.address || '*'}:${address.port}`); }); cluster.on('disconnect', (worker) => { console.log(`[0-${process.pid}]: [${worker.id}-${worker.process.pid}]IPC管道已断开`); }); cluster.on('exit', function(worker, code, signal) { console.log(`[0-${process.pid}]: [${worker.id}-${worker.process.pid}]已停止,退出码=${code} 信号=${signal}`); if (worker.exitedAfterDisconnect === true) { console.log(`[0-${process.pid}]: 这是主线程主动断开的,无需重启。`); } else { console.log(`[0-${process.pid}]: 启动一个新的工作进程`); let worker = cluster.fork(); worker.send({ do: 'start', data: worker.id, tip: `工人${worker.id}号,接替${worker.id}-${worker.process.pid}的工作吧` }); } }); // 测试主动停止工作进程 setTimeout(function() { for (let id in cluster.workers) { let worker = cluster.workers[id]; worker.send({ do: 'stop', tip: `工人${id}号,你下班吧,给你1秒钟消失` }); setTimeout(function() { console.log(`[0-${process.pid}]: 断开与[${worker.id}-${worker.process.pid}]的IPC管道`); worker.disconnect(); // 主动断开IPC管道 }, 1000); } }, 1000 * 5); } else { console.log(`工作进程${process.pid}开始`); process.on('message', function(msg) { console.log(`[${process.id || '?'}-${process.pid}]: 收到消息:`, msg.tip); switch (msg.do) { case 'start': process.id = msg.data; process.send(`好的`); const server = http.createServer(function(req, res) { res.writeHead(200); res.end(`你好,我是 ${process.id}-${process.pid} !\n`); }); server.on('close', function() { console.log(`[${process.id}-${process.pid}]: 监听已停止`); }); server.listen(8000); process.server = server; break; case 'stop': console.log(`[${process.id}-${process.pid}]: 我停止监听,准备下班`); process.server.close(); break; default: process.send(`你说啥?`); } }); } ```
0 回复
作者
liuzy
积分: 841
“ 黑眼圈圈男 ”
无人回复话题
SonarQube 9.4 + PostgreSQL
shell倒计时
日常网络巧技
使用ssh创建socks5代理服务
NodeJS集群demo
作者其他话题
SonarQube 9.4 + PostgreSQL
shell倒计时
日常网络巧技
使用ssh创建socks5代理服务
原生JS发送POST请求
回到顶部
友情链接:
JFinal
©2015 Powered by
jfinalbbs
沪ICP备15012258号