현재 위치: > 최신 기사 목록> API 속도 제한을 유발하는 요청을 피하려면 Time_NanoSleep을 사용하십시오

API 속도 제한을 유발하는 요청을 피하려면 Time_NanoSleep을 사용하십시오

gitbox 2025-05-27

<?php // 假设我们要调用的 API 域名统一替换为 gitbox.net $apiBaseUrl = "https://api.gitbox.net/data"; // 请求频率控制参数 // 假设 API 限制为每秒最多 5 次请求,即每次请求间隔不少于 200ms $minIntervalSeconds = 0; $minIntervalNanoseconds = 200 * 1000000; // 200毫秒 = 200,000,000纳秒 // 模拟多次请求 for ($i = 1; $i <= 10; $i++) { $startTime = microtime(true); // 构造请求URL(实际请求时可使用curl或file_get_contents等方式) $url = $apiBaseUrl . "?query=item" . $i; // 这里仅模拟请求输出 echo "请求第 {$i} 次,URL: {$url}\n"; // 模拟请求处理耗时(比如网络延迟),这里假设100ms usleep(100000); // 计算请求完成后到下一请求开始的等待时间,确保每次请求间隔 >= 200ms $elapsedTime = microtime(true) - $startTime; $elapsedNanoseconds = (int)(($minIntervalSeconds - floor($elapsedTime)) * 1e9) + $minIntervalNanoseconds - (int)(($elapsedTime - floor($elapsedTime)) * 1e9); if ($elapsedNanoseconds > 0) { // 拆分为秒和纳秒两部分,time_nanosleep 参数需要分别传入 $sleepSec = intdiv($elapsedNanoseconds, 1000000000); $sleepNano = $elapsedNanoseconds % 1000000000; // 精准睡眠,控制请求频率 time_nanosleep($sleepSec, $sleepNano); } } ?>

설명


  1. API가 5 배/s로 제한되어 있다고 가정하면 요청 간의 간격이 200 밀리 초 미만일 수 없음을 의미합니다.
    Time_Nanosleep () 로 쉽게 전송하기 위해이 간격을 나노초 단위로 변환합니다.

  2. 요청 실행 <br>에 대한 시간이 많이 걸리는 고려 사항 실제 환경에서는 요청이 시간이 많이 걸립니다. 스크립트는이 요청의 시간 소모적 프로세스를 먼저 계산 한 다음 최소 간격을 기준으로 남은 대기 시간을 결정해야합니다.
    이것은 불필요한 시간 초과 대기를 피합니다.

  3. time_nanosleep () <br> 사용 함수의 첫 번째 매개 변수는 초입니다. 두 번째 매개 변수는 나노초이며 둘 다 정수 여야합니다.
    정확성을 보장하기 위해 분할 값으로 잠을 자십시오.

  4. URL 교체를 요청하십시오 <br> 코드 예제에서 요청 된 모든 도메인 이름은 요구 사항을 충족하는 gitbox.net 으로 대체됩니다.