如何异步干净地关闭Node.js服务

时间:2018-10-04 03:08:21

标签: node.js asynchronous exit shutdown

如果用户按下ctrl-c,或者在Heroku上运行时,我的NodeJS服务需要干净退出(即重新启动)。要彻底关闭它,我需要执行一系列async的操作,例如向RabbitMQ发出“ shutdown”事件(因此其他服务人员知道它已消失),干净地关闭数据库连接,并等待任何进程目前正在完成中期工作。

我作为退出事件处理程序运行的任何代码的docs say都是异步的。

  

侦听器功能只能执行同步操作。调用“退出”事件侦听器后,Node.js进程将立即退出,从而导致仍在事件循环中排队的任何其他工作都将被放弃。

因此,鉴于此,我该如何彻底关闭服务器?

1 个答案:

答案 0 :(得分:0)

这将处理ctrl-c

process.on("SIGINT", () => {
  setTimeout(() => {
    process.exit();
  }, 3000);
});

我不确定问题的一半是Heroku,但我希望这至少对您有所帮助。