我对node.js服务器实现了优雅的停止。基本上是这样的:
var shutDown = function () {
server.on('close', function () {
console.log('Server ' + process.pid + ' closed.');
process.exit();
});
console.log('Shutting down ' + process.pid + '...');
server.close();
}
但是,当我像这样关闭服务器时,我的连续请求中出现Error: socket hang up
错误。
我认为server.close()
会使服务器停止侦听并接受新请求,但会继续处理所有待处理/打开请求。但是,这应该会产生Error: connect ECONNREFUSED
。
我做错了什么?
附加信息:服务器由主服务器和三个分叉的子服务器组成。但是,主人没有收听或绑定一个端口,只有孩子,并且他们如上所述被关闭。
答案 0 :(得分:1)
看the docs,听起来server.close()
只会阻止新的连接进入,所以我很确定错误是已经打开的连接。
也许您的shutDown()
可以检查server.connections
并等到没有更多?
var shutDown = function(){
if(server.connections) return setTimeout(shutDown, 1000);
// Your shutDown code here
}
稍微丑陋(并且可扩展性更低),但没有等待:您可以在发生连接时跟踪连接并自行关闭
server.on('connection', function(e){
// Keep track of e.connection in a list.
// You'll want to remove e.connection
// from the list if it closes on its own
}
var shutDown = function(){
// Close all remaining connections in the list
// Your shutDown code here
}