node.js 中的速率限制 API 查询
Rate limit API queries in node.js
我正在尝试将对 Battle.net API 的查询速率限制为 100 calls/second、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, limiter and async 自己的能力,none 似乎提供了我正在寻找的东西。
有人知道如何实现吗?
几种可能性是:
- 等到你受到限制并退避你的请求
- 跟踪您的限制和在您的应用程序中使用的限制。
虽然我认为这两种情况都需要处理,但第二种情况更有价值,因为它会让您的应用程序随时了解在给定时间范围内发出了多少请求。
您可以专注于在小时级别实施此操作,并让 backoff/retry 捕获超过 100 req/s 时间限制的情况。
要实现这一点,您的应用程序必须跟踪给定时间段内有多少请求可用。在每个请求之前,必须检查请求计数以查看是否有可用请求,如果有 API 请求可以发出,如果没有则不会发出请求并且您的应用程序将自我限制。此外,需要在适当的时候重置限制。
关于使用 redis 实现此目的的文章很多,快速 google 搜索应该可以找到它们
我正在尝试将对 Battle.net API 的查询速率限制为 100 calls/second、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, limiter and async 自己的能力,none 似乎提供了我正在寻找的东西。
有人知道如何实现吗?
几种可能性是:
- 等到你受到限制并退避你的请求
- 跟踪您的限制和在您的应用程序中使用的限制。
虽然我认为这两种情况都需要处理,但第二种情况更有价值,因为它会让您的应用程序随时了解在给定时间范围内发出了多少请求。
您可以专注于在小时级别实施此操作,并让 backoff/retry 捕获超过 100 req/s 时间限制的情况。
要实现这一点,您的应用程序必须跟踪给定时间段内有多少请求可用。在每个请求之前,必须检查请求计数以查看是否有可用请求,如果有 API 请求可以发出,如果没有则不会发出请求并且您的应用程序将自我限制。此外,需要在适当的时候重置限制。
关于使用 redis 实现此目的的文章很多,快速 google 搜索应该可以找到它们