当我closures一个http服务器时,为什么我的套接字挂断?

我对我们的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(); } 

但是,当我closures这样的服务器,我得到一个Error: socket hang up错误在我的连续请求。

我认为server.close()会使服务器停止监听并接受新的请求,但继续处理所有挂起/打开的请求。 但是,这应该导致Error: connect ECONNREFUSED

我究竟做错了什么?

附加信息:服务器由一个主人和三个分叉的孩子/工作人员组成。 但是,船长没有监听或绑定一个港口,只有这些孩子,他们被closures,如上所述。

看看文档 ,听起来像server.close()只阻止新的连接进来,所以我很确定错误是与已经打开的连接。

也许你的shutDown()可以检查server.connections并等待,直到没有更多的?

 var shutDown = function(){ if(server.connections) return setTimeout(shutDown, 1000); // Your shutDown code here } 

稍微丑陋一点(可扩展性要低得多),但是没有等待:你可以跟踪发生的连接并自己closures

 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 }