当所有连接关闭时,此Node.js服务器将在Ctrl + C上完全关闭。使用keepalives进行高效HTTP关机?
var http = require('http');
var app = http.createServer(function (req, res) {
res.end('Hello');
});
process.on('SIGINT', function() {
console.log('Closing...');
app.close(function() {
console.log('Closed.');
process.exit();
});
});
app.listen(3000);
问题在于它包含保持连接。如果您在Chrome中为此应用打开了一个标签,然后尝试按Ctrl + C,那么当Chrome终于释放连接时,它将不会关闭约2分钟。
是否有一种干净的方式来检测何时不再有HTTP请求,即使某些连接仍处于打开状态?
您可以关闭侦听套接字,然后立即启动新的服务器吗?然后你可以让它在完成时关闭,不需要多长时间。 – 2013-03-05 16:41:08
如果我在同一个进程中启动一台新服务器,是的,它可以开始监听并接受新的连接。我希望能够在开始新流程之前等待流程停止,但也许这就是我坚持以前的方式。如果没有别的,它在开发过程中很有用。 – Nick 2013-03-05 16:48:03
是的,放手吧。 :)或者,也许放弃keepalive超时5秒。无论如何,这是一个常见的策略,至少对于apache来说。节点明显不同,但它不一定是疯狂的。另外 - 你应该*能够启动一个新的进程并绑定套接字,只要这个套接字已经关闭了。 – 2013-03-05 16:51:47