我有一个无状态node.js应用程序。它是一个使用express实现的api,它连接到mongoDB数据库。每个请求完全独立于其他请求(ergo无状态)。
我想实现SIGTERM以便优雅地关闭,但我不知道应该考虑什么。
我确切知道的是我应该关闭我的数据库连接。但是,如果我这样做:
process.on('SIGTERM', function () {
server.close(function () { //Stops express
db.close(false, function() { //Closes database connection
process.exit(0);
});
});
});
我可以确保没有请求被这样做中断吗?如果没有,我如何知道是否正在提出请求以及如何等待它完成?我应该在这段时间内停止收听请求吗?如果是这样,怎么样?
提前感谢您的答案。
答案 0 :(得分:1)
假设server
是http.Server
个实例,调用.close()
将阻止服务器接受新连接(documentation),但现有请求将继续运行,直到它们为& #39;重新完成。
只有在处理完所有请求后才会调用回调函数,因此可以安全地假设此时您可以关闭数据库连接(不会再听到任何请求)