在 Express 3 中,当进程存在时如何处理关闭数据库连接?
.on('close', ...
除非您明确使用 HTTP 服务器的.close()
调用,否则不会发出该事件。
到目前为止,这是我最接近的,但它使用process.on
而不是server.on
:
process.on('SIGTERM', function () {
// Close connections.
process.exit(0);
});
根据以下信息:
--
var express = require('express');
var app = express();
var server = app.listen(1337);
var shutting_down = false;
app.use(function (req, resp, next) {
if(!shutting_down)
return next();
resp.setHeader('Connection', "close");
resp.send(503, "Server is in the process of restarting");
// Change the response to something your client is expecting:
// html, text, json, etc.
});
function cleanup () {
shutting_down = true;
server.close( function () {
console.log( "Closed out remaining connections.");
// Close db connections, other chores, etc.
process.exit();
});
setTimeout( function () {
console.error("Could not close connections in time, forcing shut down");
process.exit(1);
}, 30*1000);
}
process.on('SIGINT', cleanup);
process.on('SIGTERM', cleanup);
标Connection: close
头用于告诉任何keep-alive
连接在下次发送 HTTP 请求时关闭。更多信息在这里:http ://www.jmarshall.com/easy/http/#http1.1s4
我不知道是否有其他方法可以关闭keep-alive
连接。keep-alive
除非连接关闭,否则节点进程将挂起。默认空闲超时为 2 分钟。更多信息。关于 node.jskeep-alive
超时(包括更改超时):如何在 nodejs 服务器中设置 HTTP Keep-Alive 超时