2
NodeJS에 대한 클러스터 모듈을 테스트하고 있습니다. 다음을 달성하려고합니다.NodeJS 클러스터 모듈
- 두 클러스터 작업자와 함께 HTTP 서버를 시작하십시오. 마스터와 근로자가 시작되면
- 는, 마스터는 근로자의 응답이 당시 카운터가 0
- 로 설정되어있는 경우에는 메시지가 전에이없는 경우는
- 5 초마다 노동자에 메시지를 "확인"전송 다음 "확인"메시지가 표시되면 카운터가 증가합니다.
- 작업자가 20 초 동안 응답하지 않았 으면 나는 작업자를 죽이고 마스터가 새 작업자를 시작하게합니다. 내가 직면하고
문제는 : 나는 노동자를 죽일 때
- 는 다음 노동자, 죽이고, 다시 시작, 시간의 점에서 의미 등을 죽이고 다시 시작 루프로 들어갑니다 만 한 작업자가 활성 상태이고 다른 작업자가 응답하지 않아 루프가 반복됩니다.
내 코드는 다음과 같습니다
var cluster = require('cluster');
var http = require('http');
var numCPUs = 2;
var workerStatus = new Object();
if (cluster.isMaster) {
// Fork workers.
for (var i = 0; i < numCPUs; i++) {
cluster.fork();
}
cluster.on('exit', function(worker, code, signal) {
cluster.fork();
console.log('worker %d died (%s). restarting...', worker.process.pid, signal || code);
});
// Go through all workers
function eachWorker(callback) {
for (var id in cluster.workers) {
callback(cluster.workers[id],id);
}
}
setInterval(function(){
eachWorker(function(worker,id) {
if (workerStatus[id] == undefined) workerStatus[id]=-1;
if (workerStatus[id] < 4){
workerStatus[id]++;
console.log("Message Sent : " + id);
worker.send('check');
}else{
delete workerStatus[id]
console.log("Some Problem with " + id);
worker.disconnect();
worker.kill();
}
});
},5000);
eachWorker(function(worker,id){
var w_id =id;
worker.on('message', function(msg){
workerStatus[w_id]=0;
console.log("Message Received : " + w_id);
});
});
} else {
process.on('message', function(msg) {
process.send(msg);
});
// Workers can share any TCP connection
// In this case its a HTTP server
http.createServer(function(req, res) {
while (1) {}
res.writeHead(200);
res.end("hello world--" + cluster.worker.id);
//cluster.worker.kill();
}).listen(8080);
}