如何排队在Nodejs HTTP获取请求,以控制他们的速度?

我有一个NodeJS应用程序,它从代码中的不同位置发送HTTP get请求,有些甚至是依赖的(发送请求,等待回复,处理它并根据结果发送另一个请求)。 我需要限制请求的速率(例如,每小时10个请求)。

我想排队的请求,然后在一些中心点以受控的方式释放它们,但卡在如何排队callback函数及其相关参数。

很高兴能听到有关如何在应用程序最低限度重组的情况下完成这一scheme的build议。

谢谢

我想你已经回答了你的问题。 一个可以抑制你的请求的中央队列是要走的路。 这里唯一的问题是队列必须具有请求的全部信息和应该使用的callback。 我会在一个QueueableRequest对象中抽象这个可能看起来像这样的东西:

 var QueueableRequest = function(url, params, httpMethod, success, failure){ this.url = url; this.params = params; ... } //Then you can queue your request with queue.add(new QueueableRequest({ "api.test.com", {"test": 1}, "GET", function(data){ console.log('success');}, function(err){ console.log('error');} })); 

当然,这只是示例代码,可能会更漂亮,但我希望你能得到的图片。

asynchronous模块有一些控制stream选项可以帮助你。 queue听起来很合适,可以限制并发。

我会使用Deferreds并为每个排队的请求返回一个。 然后,您可以在延迟的承诺排队后添加成功/失败callback。

 var deferred = queue.add('http://example.com/something'); deferred.fail(function(error) { /* handle failure */ }); deferred.done(function(response) { /* handle response */ }); 

你可以在你的队列中保存一个[ url, deferred ]对,每次你离开一个URL时,你也会得到Deferred,它可以在你处理请求之后解决或失败。