如果用户按下ctrl-c
,或者在Heroku上运行时,我的NodeJS服务需要干净退出(即重新启动)。要彻底关闭它,我需要执行一系列async
的操作,例如向RabbitMQ发出“ shutdown”事件(因此其他服务人员知道它已消失),干净地关闭数据库连接,并等待任何进程目前正在完成中期工作。
我作为退出事件处理程序运行的任何代码的docs say都是异步的。
侦听器功能只能执行同步操作。调用“退出”事件侦听器后,Node.js进程将立即退出,从而导致仍在事件循环中排队的任何其他工作都将被放弃。
因此,鉴于此,我该如何彻底关闭服务器?
答案 0 :(得分:0)
这将处理ctrl-c
:
process.on("SIGINT", () => {
setTimeout(() => {
process.exit();
}, 3000);
});
我不确定问题的一半是Heroku,但我希望这至少对您有所帮助。