如何限制来自 PHP 应用程序的外部 API 调用

我有一个 PHP 应用程序,每分钟调用过多的外部 API 超载。我需要将其限制为每分钟仅 20 个呼叫,但我似乎无法弄清楚。我已经研究了这个问题并发现了这个那个,但是缺乏适当的文档,我不知道它是如何工作的。我知道这被称为“速率限制”,但我想我在学校跳过了它。

我的应用程序只是循环发送 cURL 请求。我在程序中运行了几个循环来收集所有这些信息。我可以用一个计时器将一个循环限制为每分钟 20 个,但我有 17 个循环正在运行,并且我在循环中有循环。是否可以使用单个帮助程序或其他东西来限制我的 PHP 应用程序中的所有 cURL 请求而不编辑我的所有代码?


胡子哥哥
浏览 128回答 1
1回答

烙印99

无法使用任何内置功能来限制 PHP 函数的速率。您可以编写一些简单的包装器,它每分钟仅调用 API 给定的次数。一个粗略的示例如下所示:function callAPI($api) {&nbsp; &nbsp; static $lastRequest;&nbsp; &nbsp; $maxRequestsPerMin = 20;&nbsp; &nbsp; if (isset($lastRequest)) {&nbsp; &nbsp; &nbsp; &nbsp; $delay = 60 / $maxRequestsPerMin; // 60 seconds / $maxRequestsPerMin&nbsp; &nbsp; &nbsp; &nbsp; if ((microtime(true) - $lastRequest) < $delay) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // Sleep until the delay is reached&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $sleepAmount = ($delay - microtime(true) + $lastRequest) * (1000 ** 2);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; usleep($sleepAmount);&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; }&nbsp; &nbsp; $lastRequest = microtime(true);&nbsp; &nbsp; // Call you API here}但是,这只会限制此特定脚本的速率。如果您执行另一个,那么您将启动另一个计数器。或者,您可以将一些循环表存储在平面文件或数据库中,并在每次要调用 API 时对其进行检查。对于高级用法,您应该查看消息队列或 ReactPHP。如果此类功能会暴露给最终用户,您不希望挂起您的服务器。
打开App,查看更多内容
随时随地看视频慕课网APP