为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
胡子哥哥 2022-07-09 16:46:52
我有一个 PHP 应用程序,每分钟调用过多的外部 API 超载。我需要将其限制为每分钟仅 20 个呼叫,但我似乎无法弄清楚。我已经研究了这个问题并发现了这个和那个,但是缺乏适当的文档,我不知道它是如何工作的。我知道这被称为“速率限制”,但我想我在学校跳过了它。我的应用程序只是循环发送 cURL 请求。我在程序中运行了几个循环来收集所有这些信息。我可以用一个计时器将一个循环限制为每分钟 20 个,但我有 17 个循环正在运行,并且我在循环中有循环。是否可以使用单个帮助程序或其他东西来限制我的 PHP 应用程序中的所有 cURL 请求而不编辑我的所有代码?
查看完整描述

1 回答

?
烙印99

TA贡献1829条经验 获得超13个赞

无法使用任何内置功能来限制 PHP 函数的速率。您可以编写一些简单的包装器,它每分钟仅调用 API 给定的次数。一个粗略的示例如下所示:


function callAPI($api) {

    static $lastRequest;

    $maxRequestsPerMin = 20;

    if (isset($lastRequest)) {

        $delay = 60 / $maxRequestsPerMin; // 60 seconds / $maxRequestsPerMin

        if ((microtime(true) - $lastRequest) < $delay) {

            // Sleep until the delay is reached

            $sleepAmount = ($delay - microtime(true) + $lastRequest) * (1000 ** 2);

            usleep($sleepAmount);

        }

    }

    $lastRequest = microtime(true);


    // Call you API here

}

但是,这只会限制此特定脚本的速率。如果您执行另一个,那么您将启动另一个计数器。或者,您可以将一些循环表存储在平面文件或数据库中,并在每次要调用 API 时对其进行检查。


对于高级用法,您应该查看消息队列或 ReactPHP。如果此类功能会暴露给最终用户,您不希望挂起您的服务器。


查看完整回答
反对 回复 2022-07-09
  • 1 回答
  • 0 关注
  • 127 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信