1
을 나열하지 :Nodejs 클러스터는이 nodejs API에서 복사
는 내가 뭘 원하는 마스터에서 백그라운드 작업을 수행하고 근로자의 HTTP 요청을 수락하는 것입니다.
배경 작업 부분을 주석 처리하면 제대로 작동합니다.
Master 45476 is running
Worker 45479 started
Worker 45483 started
Worker 45482 started
Worker 45478 started
그러나 netstat
쇼 8000가 닫혀 : 여기
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`);
}
는 로그입니다. 의 소스
curl
이 실패합니다.
하지만 'Worker 45482 started'라는 것을 볼 수 있듯이, master는 차단되는 동안 왜 분리 된 작업자 프로세스도 차단됩니까? – Sato
화면에 인쇄하는 코드는 주 프로세스 (console.log ..)에 있지만 주 프로세스가 사용 중이면 출력을 볼 수 없습니다. –
'123' 출력을 볼 수 있습니다. 하지만 'Worker 45482 started'가 출력되기 때문에 작업자 프로세스의 http.createServer도 실행됩니다. 그러나 '8000' 포트는 열려 있지 않습니다. – Sato