抱歉,由于某种原因,我没有正确阅读您的问题
maxSockets是 http 模块将为当前进程建立的最大连接数。您可以通过从 访问它来查看您当前的设置http.globalAgent.maxSockets
。
您可以使用以下内容查看有关给定主机的当前连接数的一些信息:
console.log("Active socket connections: %d", http.globalAgent.sockets['localhost:8080'].length )
console.log("Total queued requests: %d", http.globalAgent.requests['localhost:8080'].length)
localhost:8080
也用您提出请求的主机和端口替换。
您可以在以下两点看到节点如何处理这些连接:
添加新连接并存储到请求队列
https://github.com/joyent/node/blob/master/lib/_http_agent.js#L83
从排队的请求创建连接
https://github.com/joyent/node/blob/master/lib/_http_agent.js#L148
我很快就写了这篇文章,让您了解如何将这些请求错开一点。此特定代码不会检查有多少请求“待处理”,您可以轻松修改它以允许您在任何给定时间仅发出一定数量的请求(老实说,这将是更好的方法) .
var Stagger = function (data, stagger, fn, cb) {
var self = this;
this.timerID = 0;
this.data = [].concat(data);
this.fn = fn;
this.cb = cb;
this.stagger = stagger;
this.iteration = 0;
this.store = {};
this.start = function () {
(function __stagger() {
self.fn(self.iteration, self.data[self.iteration], self.store);
self.iteration++;
if (self.iteration != self.data.length)
self.timerID = setTimeout(__stagger, self.stagger);
else
cb(self.store);
})();
};
this.stop = function () {
clearTimeout(self.timerID);
};
};
var t = new Stagger([1,2,3,4,5,6], 1000, function (i, item, store) {
console.log(i, item);
if (!store.out) store.out = [];
store.out[i] = Math.pow(2,i);
},
function (store) {
console.log('Done!', store);
});
t.start();
这段代码肯定可以改进,但它应该让你知道从哪里开始。
现场演示: http: //jsbin.com/ewoyik/1/edit(注意:需要控制台)