第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

如何限制來自 PHP 應(yīng)用程序的外部 API 調(diào)用

如何限制來自 PHP 應(yīng)用程序的外部 API 調(diào)用

PHP
胡子哥哥 2022-07-09 16:46:52
我有一個(gè) PHP 應(yīng)用程序,每分鐘調(diào)用過多的外部 API 超載。我需要將其限制為每分鐘僅 20 個(gè)呼叫,但我似乎無法弄清楚。我已經(jīng)研究了這個(gè)問題并發(fā)現(xiàn)了這個(gè)和那個(gè),但是缺乏適當(dāng)?shù)奈臋n,我不知道它是如何工作的。我知道這被稱為“速率限制”,但我想我在學(xué)校跳過了它。我的應(yīng)用程序只是循環(huán)發(fā)送 cURL 請(qǐng)求。我在程序中運(yùn)行了幾個(gè)循環(huán)來收集所有這些信息。我可以用一個(gè)計(jì)時(shí)器將一個(gè)循環(huán)限制為每分鐘 20 個(gè),但我有 17 個(gè)循環(huán)正在運(yùn)行,并且我在循環(huán)中有循環(huán)。是否可以使用單個(gè)幫助程序或其他東西來限制我的 PHP 應(yīng)用程序中的所有 cURL 請(qǐng)求而不編輯我的所有代碼?
查看完整描述

1 回答

?
烙印99

TA貢獻(xiàn)1829條經(jīng)驗(yàn) 獲得超13個(gè)贊

無法使用任何內(nèi)置功能來限制 PHP 函數(shù)的速率。您可以編寫一些簡(jiǎn)單的包裝器,它每分鐘僅調(diào)用 API 給定的次數(shù)。一個(gè)粗略的示例如下所示:


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

}

但是,這只會(huì)限制此特定腳本的速率。如果您執(zhí)行另一個(gè),那么您將啟動(dòng)另一個(gè)計(jì)數(shù)器?;蛘?,您可以將一些循環(huán)表存儲(chǔ)在平面文件或數(shù)據(jù)庫(kù)中,并在每次要調(diào)用 API 時(shí)對(duì)其進(jìn)行檢查。


對(duì)于高級(jí)用法,您應(yīng)該查看消息隊(duì)列或 ReactPHP。如果此類功能會(huì)暴露給最終用戶,您不希望掛起您的服務(wù)器。


查看完整回答
反對(duì) 回復(fù) 2022-07-09
  • 1 回答
  • 0 關(guān)注
  • 139 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)