http.globalAgent.maxSockets is not always respected
Aborting a pending request (whose response is not read yet) causes http.globalAgent.maxSockets
to not being respected for future requests.
Specifically:
- the response must contain some data;
- there must be a
'response'
listener registered for the requests.
I can reproduce the issue with the following:
client.js
:
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();
});
}
server.js
:
require('http').createServer(function (reqest, response) {
console.log('R');
response.end('hello');
}).listen(8080);
Run server.js
then client.js
; the output of the former is:
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...
[...]
# up to 100
I was expecting groups of three requests each, instead of: 100 = 3 + 6 + 12 + 24 + 48 + 7.
The output of client.js
reflects the one of server.js
.
This happen at least with v4.1.1
and v5.1.0
.
I apologize if the above is the intended behavior and I'm just misunderstanding request.abort()
and agent.maxSockets
.