0

我对我们的 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.

我究竟做错了什么?

附加信息:服务器由一个主服务器和三个分叉的孩子/工人组成。然而,master 并没有监听或绑定到一个端口,只有子节点在监听,并且它们如上所述被关闭。

4

1 回答 1

0

查看文档,听起来好像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
}
于 2012-05-31T06:14:46.450 回答