【问题标题】:Rate limit API queries in node.jsnode.js 中的速率限制 API 查询
【发布时间】:2015-11-17 00:59:33
【问题描述】:

我正在尝试将对战网 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 自己的功能,但似乎没有一个能提供我想要的功能。

有人知道如何做到这一点吗?

【问题讨论】:

  • 那么,您想实现自己的限制器以确保您的服务不会影响战网的速率限制吗?
  • 不完全是,我想知道是否有任何解决方案可以实现它。
  • 要求第三方库解决方案的问题在 StackOverflow 被认为是题外话。

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


【解决方案1】:

有几种可能:

  1. 等到您受到限制并回退您的请求
  2. 在应用程序中跟踪您的限制和使用限制。

虽然我认为这两种情况都需要处理,但第二种情况更有价值,因为它会让您的应用程序随时知道在给定时间范围内发出了多少请求。

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

要实现这一点,您的应用程序必须跟踪给定时间段内有多少请求可用。在每个请求之前,必须检查请求计数以查看是否有可用的请求,如果有 API 请求可以发出,如果没有,则不会发出任何请求,您的应用程序将自行限制。此外,需要在适当的时候重新设置限制。

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

【讨论】:

  • 请提供您提到的文章的链接。
猜你喜欢
  • 1970-01-01
  • 2013-03-28
  • 1970-01-01
  • 1970-01-01
  • 2015-12-17
  • 2020-11-04
  • 1970-01-01
  • 2014-08-05
相关资源
最近更新 更多