我试图将对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.js、限制器和异步自己的能力,似乎没有一个能提供我想要的东西。
有人知道如何做到这一点吗?
发布于 2015-08-23 16:22:27
有几种可能性是:
虽然我认为这两种情况都需要处理,但第二种情况更有价值,因为它将在任何时候让您的应用程序知道在给定的时间框架内提出了多少请求。
您可以专注于在小时级别上实现这一点,并让退避/重试捕获超过100 req/s时间限制的情况。
要实现这一点,应用程序必须跟踪给定时间段内有多少请求可用。在每个请求之前,必须检查请求计数,以确定是否有可用的请求,如果存在API请求,如果没有,则不会发出请求,您的应用程序将节流自身。此外,限制需要在适当的时候重新设置。
有很多关于使用redis来实现这一目标的文章,一个快速的google搜索应该会发现它们。
https://stackoverflow.com/questions/32168150
复制相似问题