Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

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

Thanks to Yann Biancheri for putting together an initial test.
  • Loading branch information...
commit efca5456b8dd3e94b3af02ccaf94d032ded6a48c 1 parent f78f654
@ry ry authored
Showing with 50 additions and 11 deletions.
  1. +1 −11 lib/http.js
  2. +49 −0 test/simple/test-regress-GH-877.js
View
12 lib/http.js
@@ -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
49 test/simple/test-regress-GH-877.js
@@ -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);
+});
Please sign in to comment.
Something went wrong with that request. Please try again.