亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何限制來自 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 關注
  • 142 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號