var cluster = require('cluster');
var http = require('http');
var numCPUs = require('os').cpus().length;
//fork 이후에 코드를 다시 읽을 대는 worker가 읽는 거라 master가 아니기 때문에 cluster.isMaster = false가 된다.
if (cluster.isMaster)
{
console.log('난 마스터다.');
for (var i=0;i<numCPUs ;i++ )
{
console.log('worker process create');
cluster.fork();
}
cluster.on('exit', function(worker, code, signal){
console.log('worker ${worker.process.pid} died');
cluster.fork();
});
}else{
console.log('난 워커다.');
http.createServer(function(req, res){
res.writeHead(200);
res.end('helloworld');
console.log(cluster.worker.process.pid);
}).listen(8000, function(){
console.log(cluster.worker.process.pid);
});
}
그냥 돌아다니는 cluster기본 예제인데..
내 생각엔 8000포트를공유하는 worker를 생성하고
그워커들이 기다리고있다가 8000으로 들어오면 반응하는건데..
console.log(cluster.worker.process.pid);
이거로 pid찍으면 왜 똑같은 pid만 찍히징?
보통 pm2 같은거로 프로세스 여러개 포트 다르게 띄워서 관리하고. 엔진에스나 뭐 그런류 웹서버에서도 2단으로 로드발란싱하는게 정석이긴함
ㅋㅋ아니아니..그냥 cluster원리? 돌아가는게 궁금해서..포트공유하는 pid가 여러개 생성되는데 왜 웹에 접속하면 똑같은 pid만 console에 찍히는지.. 워커 하나만 반응하고잇는거같아서
저건 노드 이벤트 루프를 걍 두개 돌리는거지
아하 프로세스가 실제2개 도는건 아니고 8000으로 들어올때 이벤트 핸들러가 내부적으로 하나 더 생긴거지?돌아가는 웹서버는 하나고