1
这是从API的NodeJS复制:集群的NodeJS不上市
我想要做的是做主人后台作业,并接受职工的HTTP请求。
如果我注释掉后台作业部分,它运行良好。
const cluster = require('cluster');
const http = require('http');
const numCPUs = require('os').cpus().length;
const sleep = require('sleep');
if (cluster.isMaster) {
console.log(`Master ${process.pid} is running`);
// Fork workers.
for (let i = 0; i < numCPUs; i++) {
cluster.fork();
}
cluster.on('exit', (worker, code, signal) => {
console.log(`worker ${worker.process.pid} died`);
});
// background jobs start
while(true) {
console.log(123)
sleep.sleep(1) // do_background_jobs()
}
// background jobs end
} else {
// Workers can share any TCP connection
// In this case it is an HTTP server
http.createServer((req, res) => {
res.writeHead(200);
res.end('hello world\n');
}).listen(8000);
console.log(`Worker ${process.pid} started`);
}
下面是日志:
Master 45476 is running
Worker 45479 started
Worker 45483 started
Worker 45482 started
Worker 45478 started
但netstat
显示8000被关闭。的源码curl
失败。
但是,正如你所看到的'Worker 45482 started',master被阻塞了,为什么单独的工作进程也被阻塞了? – Sato
打印到屏幕的代码位于主进程(console.log ..)中,但如果主进程繁忙,则看不到输出。 –
我可以看到'123'输出。但是由于'Worker 45482 started'被打印,因此工作进程中的'http.createServer'也被执行。但'8000'端口未打开。 – Sato