如何排队在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,它可以在你处理请求之后解决或失败。