详解 Node.Js 中实现端口重用原理

起源,从官方实例中看多进程共用端口

// app.js 自定义我们服务文件
const http = require('http')  // http模块
const server = http.createServer((request, response) => {
 Math.random() > 0.5 ? aa() : '2' 
 response.end('Hello ')
})
if (!module.parent) {
 server.listen(3000);
 console.log('app started at port 3000...');
} else {
 module.exports = server
}

// test.js编写发送请求的js文件
const request = require('request');
setInterval(() => {
 request('http://localhost:3000', function (error, response, body) {
 console.log('body:', body); // Print the HTML for the Google homepage.
 })
}, 1000
)

// cluster.js 故障重启 多喝利用文件
var cluster = require('cluster'); // 集群模块
var os = require('os'); // 获取CPU 的数量
var numCPUs = os.cpus().length; // 几核的
var process = require('process')
var workers = {};  // 存放子进程集合
if (cluster.isMaster) {
 // 主进程分⽀
 cluster.on('exit', (worker, code, signal) => {
 console.log('⼯作进程 %d 关闭 (%s). 重启中...',
 worker.process.pid, signal || code);
 delete workers[worker.process.pid]
 worker = cluster.fork()
 workers[worker.process.pid] = worker
 });
 console.log('numCPUs:', numCPUs)
 for (var i = 0; i < numCPUs; i++) {
 var worker = cluster.fork();
 console.log('init ... pid', worker.process.pid)
 workers[worker.process.pid] = worker;
 }
} else {
 var app = require('./app');
 app.listen(3000);
}
// 当主进程被终⽌时,关闭所有⼯作进程
process.on('SIGTERM', function () {
 for (var pid in workers) {
 process.kill(pid);
 }
 process.exit(0);
});
require('./test')

参考文章https://www.sohu.com/a/247732550_796914【】

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值