Fixes #877. Don't wait for socket pool to establish connections.

Thanks to Yann Biancheri for putting together an initial test.
This commit is contained in:
Ryan Dahl 2011-07-01 15:49:39 -07:00
parent f78f654131
commit efca5456b8
2 changed files with 50 additions and 11 deletions

View File

@ -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;
@ -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];
@ -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();
}

View File

@ -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);
});