Я пытаюсь закрыть работника nodejs после 'x' seconds
, и когда я пытаюсь закрыть работника через указанный промежуток времени, вызвав cluster.worker.disconnect()
, тот же самый работник все еще принимает новые запросы до вызова processsexit () и работника не перезагружается изящно.
Нужна помощь, чтобы определить, как остановить сервер от получения дальнейших запросов через 'x' секунд, обработать существующий запрос и перезапустить изящно.
В настоящее время я думаю об этом подходе, который не будет перезагружать сервер ровно через 'x' секунд, но в конечном итоге он будет перезагружен изящно.
1) После 'x секунд' вызовите приведенный ниже фрагмент
if (cluster.worker) {
cluster.worker.disconnect();
}
server.close();
2) Затем обрабатывает событие закрытия сервера, и сервер будет запускать закрытие, когда он простаивает, и закрывает сервер.
server.on('close', function(){
console.log("Closed the server worker with pid: " + process.pid + " port: " + process.env.PORT + " date: " + staticFunctions.getLogDate());
if(cluster.worker){
process.exit(1);
}
});
3) Затем используйте обработчик события выхода процесса для форка нового работника:
cluster.on('exit', function(worker, code, signal) {
console.log("worker => exit with pid: "+ worker.process.pid+" Died. Restarting. port: " + process.env.PORT + " date: " + staticFunctions.getLogDate());
var id = some_id;
setTimeout(function() {
var worker = cluster.fork({'workerId' : id});
},2000);
});