Node.js SIGTERM实现注意事项

Node.js SIGTERM implementation considerations

本文关键字:注意事项 实现 SIGTERM js Node      更新时间:2023-09-26

我有一个无状态node.js应用程序。它是一个api实现与express连接到mongoDB数据库。每个请求都完全独立于其他请求(因此是无状态的)。

我想实现一个SIGTERM,以便优雅地关闭,但我不知道我应该考虑什么。

我所知道的是我应该关闭我的数据库连接。但是,如果我这样做:

process.on('SIGTERM', function () {
  server.close(function () { //Stops express
    db.close(false, function() { //Closes database connection
      process.exit(0);
    });
  });
});

我能保证这样做不会中断请求吗?如果没有,我如何知道是否正在发出请求以及如何等待请求完成?在此期间,我是否应该停止监听请求?如果有,怎么做?

提前感谢您的回答

假设serverhttp.Server实例,调用.close()将停止服务器接受新的连接(文档),但现有的请求将继续运行,直到它们完成。

回调函数只有在所有请求都被处理完之后才会被调用,因此可以安全地假设此时可以关闭数据库连接(不再有任何请求侦听它)。