限制节点js中的并行http请求数

时间:2014-11-11 20:58:32

标签: javascript node.js

嗨大家我是节点js的新手。

我有一个脚本,我在循环中启动了几个http请求 假设我必须发出1000个http请求。 问题是我每个IP只能做一个http请求而且我只有10个IP

因此,在10个并行请求之后,我必须等待响应才能生成另一个请求。

如何不阻止来自http请求的脚本响应以启动另一个响应?

我的问题是,如果我执行一段时间等待免费IP,我的整个脚本被阻止,我没有收到任何回复。

感谢。

1 个答案:

答案 0 :(得分:21)

使用async模块。

您可以使用async#eachLimit将并发请求限制为10。

var urls = [
  // a list of 100 urls
];

function makeRequest(url, callback) {
  /* make a http request */
  callback(); // when done, callback
}

async.eachLimit(urls, 10, makeRequest, function(err) {
  if(err) throw err;
});

此代码将循环遍历网址列表,并为每个网址调用makeRequest。它将停止在10个并发请求中,并且不会继续第11个请求,直到前10个请求中的一个完成。