Node.js http.globalAgent.maxSockets不受尊重

时间:2015-11-27 14:25:20

标签: javascript node.js

问题

如果已注册response事件的请求中止,则不再遵守maxSockets限制。它似乎只在响应包含一些数据时才会发生。

经测试的版本: v4.1.1和v5.1.0

客户端

var http = require('http');

http.globalAgent.maxSockets = 3;

for (var i = 0; i < 100; i++) {
    var request = http.get('http://127.0.0.1:8080', function () {
        // just register a listener...
    });
    request.setTimeout(1000, function () {
        console.log('T')
        this.abort();
    });
}

服务器

require('http').createServer(function (reqest, response) {
    console.log('R');
    response.end('hello');
}).listen(8080);

行为

服务器输出为:

$ node server.js 
R
R
R
# 1s timeout here...
R
R
R
R
R
R
# 1s timeout here...
R
R
R
R
R
R
R
R
R
R
R
R
# 1s timeout here...
[...]

似乎每次maxSockets乘以2(3,6,12,24等),即使其值不变。我期待的是3组。

恢复响应,而不是中止请求,在这种情况下正常工作。

1 个答案:

答案 0 :(得分:0)

嗯,这是一个带有Node.js的bug