Skip to content
This repository has been archived by the owner on Apr 22, 2023. It is now read-only.

Commit

Permalink
Fixes #877. Don't wait for socket pool to establish connections.
Browse files Browse the repository at this point in the history
Thanks to Yann Biancheri for putting together an initial test.
  • Loading branch information
ry committed Jul 1, 2011
1 parent f78f654 commit efca545
Show file tree
Hide file tree
Showing 2 changed files with 50 additions and 11 deletions.
12 changes: 1 addition & 11 deletions lib/http.js
Original file line number Diff line number Diff line change
Expand Up @@ -1152,12 +1152,6 @@ Agent.prototype.appendMessage = function(options) {
this.queue.push(req);
req._queue = this.queue;

/*
req.on('finish', function () {
self._cycle();
});
*/

this._cycle();

return req;
Expand Down Expand Up @@ -1374,8 +1368,6 @@ Agent.prototype._cycle = function() {
var first = this.queue[0];
if (!first) return;

var haveConnectingSocket = false;

// First try to find an available socket.
for (var i = 0; i < this.sockets.length; i++) {
var socket = this.sockets[i];
Expand All @@ -1395,13 +1387,11 @@ Agent.prototype._cycle = function() {
self._cycle(); // try to dispatch another
return;
}

if (socket._httpConnecting) haveConnectingSocket = true;
}

// If no sockets are connecting, and we have space for another we should
// be starting a new connection to handle this request.
if (!haveConnectingSocket && this.sockets.length < this.maxSockets) {
if (this.sockets.length < this.maxSockets) {
this._establishNewConnection();
}

Expand Down
49 changes: 49 additions & 0 deletions test/simple/test-regress-GH-877.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
var common = require('../common');
var http = require('http');
var assert = require('assert');

var N = 20;
var responses = 0;
var maxQueued = 0;

debugger;

var agent = http.getAgent('127.0.0.1', common.PORT);
agent.maxSockets = 10;

var server = http.createServer(function (req, res) {
res.writeHead(200);
res.end('Hello World\n');
});

server.listen(common.PORT, "127.0.0.1", function() {
for (var i = 0; i < N; i++) {
var options = {
host: '127.0.0.1',
port: common.PORT,
};

debugger;

var req = http.get(options, function(res) {
if (++responses == N) {
server.close();
}
});

assert.equal(req.agent, agent);

console.log('Socket: ' + agent.sockets.length +
'/' + agent.maxSockets +
' queued: '+ agent.queue.length);

if (maxQueued < agent.queue.length) {
maxQueued = agent.queue.length;
}
}
});

process.on('exit', function() {
assert.ok(responses == N);
assert.ok(maxQueued <= 10);
});

0 comments on commit efca545

Please sign in to comment.