首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何管理请求受限的API调用

如何管理请求受限的API调用
EN

Stack Overflow用户
提问于 2012-11-05 17:30:33
回答 3查看 3K关注 0票数 1

我使用的是tmdb API,它对请求有一个新的限制,即每个IP在10秒内有30个请求。我可以通过在MySQL中拥有一个表来跟踪这些调用,该表在最后10秒内保存请求量,但是如何使用不同的IP地址来完成这个任务呢?

我的应用程序的工作方式是:

  1. 从桌面应用程序向应用程序服务器发出请求。服务器端php然后进行搜索并返回数据。
  2. 然后,桌面应用程序对app服务器进行不同的调用,然后依次对tmdb (4-7)和其他api进行几次api调用。

在某些情况下,可以有从几个搜索请求到几千个请求的任何地方。跟踪和延迟api调用以使其保持在限制以下的最佳方法是什么?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-11-05 17:52:00

如果您的服务器正在向另一个具有速率限制的服务器发送请求,则需要一种全局方法来跟踪来自您服务器的请求,而不管哪个客户端正在向您的服务器发出请求等等。

我将使用一个平面文件,并为每个请求节省unix时间和一个分隔符,如果该文件包含10个请求,您已经完成了10个请求,您需要清理该文件并删除任何超过10秒的时间戳,这将为您提供PHP速率限制器的最简单形式。

当然还有更高级的方法,但我会从这里开始,并确保您测试它,这样您就不会失去API访问权限等等。

票数 2
EN

Stack Overflow用户

发布于 2012-11-05 17:34:32

您可以使用php睡眠函数来限制发出请求的速率。或者使用一些类似的睡眠功能,通过给出你想要延迟的几微秒来停止。

票数 1
EN

Stack Overflow用户

发布于 2015-07-12 19:11:21

令牌桶算法可以进行速率限制。我为您创建了一个具有共享存储的线程安全实现:带宽-节流/令牌桶

此示例将将应用程序控制在每秒3个请求的全局消耗率上:

代码语言:javascript
复制
use bandwidthThrottle\tokenBucket\Rate;
use bandwidthThrottle\tokenBucket\TokenBucket;
use bandwidthThrottle\tokenBucket\BlockingConsumer;
use bandwidthThrottle\tokenBucket\storage\PDOStorage;

$storage  = new PDOStorate("tmdb", $pdo);
$rate     = new Rate(3, Rate::SECOND);
$bucket   = new TokenBucket(30, $rate, $storage);
$consumer = new BlockingConsumer($bucket);
$bucket->bootstrap(30);

$consumer->consume(1);
$api->foo();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13237287

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档