我正在尝试使用 express 4.x http服务器在 node.js 中正常关闭。
关闭快递服务器很容易,但让我担心的是我们有很多异步工作。流程示例:
所以,如果我像这样优雅地关闭代码:
process.on('SIGTERM', function () {
serverInstance.close(function(){
closeConnectionToDatabases(function(){
process.exit(0);
})
});
// shutdown anyway after some time
setTimeout(function(){
process.exit(0);
}, 8000);
});
如果SIGTERM发生在上面介绍的流程的第一步和第二步之间,我怎么能确定一切顺利?第四,第五和第六步呢?有没有什么好方法可以解决这个问题,或者仅仅是以异步方式手动监视来自您服务的所有请求并等待它们?
谢谢, 伊万
答案 0 :(得分:1)
process.exit()
会立即终止node.js
进程,而无需等待所有异步任务完成。
如果要真正正常关闭,则应手动关闭所有资源(所有打开的连接和文件描述符),而不是调用process.exit()
。在这种情况下,node.js
将在完成所有挂起的异步任务后立即终止。
因此,只需关闭所有数据库连接和其他I / O资源:
process.on('SIGTERM', function () {
serverInstance.close(function(){
closeConnectionToDatabases(function(){
// now node.js should close automatically
})
});
// shutdown anyway after some time
setTimeout(function(){
process.exit(0);
}, 8000);
});