根据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();
});
答案 0 :(得分:1)
您在问题中发布了解决方案。
停止服务器接受新连接,保持现有 的连接强>
换句话说,您打开的连接会一直打开,直到超时为止。这称为keep-alive
connection。
请参阅此回答 how-do-i-shutdown-a-node-js-https-server-immediately ,了解在调用server.close();
方法后立即关闭所有连接的方法。