node.js中的速率限制API查询

时间:2015-08-23 15:08:32

标签: javascript node.js asynchronous rate-limiting throttling

我试图对Battle.net API的限制查询速率达到每秒100次通话的限制,每小时36,000次。

我目前的代码如下:

var async = require ('async');
var bnet = require ('battlenet-api');

async.eachSeries(regions, function(region, callback) {
    bnet.wow.realmStatusAsync({origin: region}).spread(/*...snip...*/)
});

我在这里需要的是确保没有电话 battlenet-api达到极限,如果是,请排队。

我查看了timequeue.jslimiterasync自己的能力,似乎没有提供我想要的内容。

有人知道如何实现这个目标吗?

1 个答案:

答案 0 :(得分:0)

有几种可能性:

  1. 等到你受到限制并退回你的请求
  2. 跟踪您的限制并在您的应用程序中使用限制。
  3. 虽然我认为这两种情况都需要处理,但第二种情况更有价值,因为它会让您的应用程序随时了解在给定时间范围内已经提出了多少请求。

    您可以专注于在小时级别实现此功能,并让退避/重试捕获超过100 req / s时间限制的情况。

    要实现此目的,您的应用程序必须跟踪给定时间段内可用的请求数。在每次请求之前,必须检查请求计数以查看是否有可用请求,是否可以进行API请求,如果没有,则不会发出请求,您的应用程序将自行调整。此外,需要在适当时重置限制。

    有很多关于使用redis来实现这一目标的文章,快速谷歌搜索应该发现它们