起源,从官方实例中看多进程共用端口
// 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【】