如何正确“关闭”node.js服务器?

时间:2014-11-04 17:09:33

标签: node.js

根据documentation来电server.close()

  

停止服务器接受新连接并保留现有连接。

所以我的代码是:

var http = require('http');

var server = http.createServer(function (req, res) {
    console.log('path: ' + req.url);

    server.getConnections(function (err, count) {
        console.log('connections: ' + count);

        res.end('end');

        server.close();
    });
});

server.listen(3000);

server.on('close', function () {
    console.log('server closed');

    process.exit(1);
});

以下是向http://localhost:3000提出两个请求后的问题:

> path: /                              connections: 1                   
> path: /                              connections: 1                   
> 
>                                      net.js:1236                         
>     throw new Error('Not running'); 
>           ^                          Error: Not running                  
>     at Server.close (net.js:1236:11)

这意味着即使在我调用server.close()的第一个连接期间也接受了第二个连接。

我错过了什么?

编辑:根据@ gino9的评论,即使我在getConnections回调之外关闭服务器,问题仍然存在。

var server = http.createServer(function (req, res) {
    console.log('path: ' + req.url);

    res.end(new Date() + '');

    server.close();
});

1 个答案:

答案 0 :(得分:1)

您在问题中发布了解决方案。

  

停止服务器接受新连接,保持现有   的连接

换句话说,您打开的连接会一直打开,直到超时为止。这称为keep-alive connection

请参阅此回答 how-do-i-shutdown-a-node-js-https-server-immediately ,了解在调用server.close();方法后立即关闭所有连接的方法。