Nodejs - работник принимает новый запрос даже после вызова cluster.worker.disconnect () - PullRequest
0 голосов
/ 05 сентября 2018

Я пытаюсь закрыть работника 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);
});

1 Ответ

0 голосов
/ 12 февраля 2019

Проблема с server.close, который узлы не читают, чтобы принять.

Вы можете следить за вопросом на GitHub. https://github.com/nodejs/node/issues/2642#issuecomment-229753639

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...