Aktueller Standort: Startseite> Neueste Artikel> Verwenden Sie Time_nanosleeep, um Anforderungen zu vermeiden

Verwenden Sie Time_nanosleeep, um Anforderungen zu vermeiden

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); } } ?>

veranschaulichen


  1. Unter der Annahme, dass die API auf das Fünf -mal -/n -Wert begrenzt ist, bedeutet dies, dass das Intervall zwischen Anfragen nicht weniger als 200 Millisekunden betragen.
    Wir wandeln dieses Intervall in Nanosekundeneinheiten um, um eine einfache Übertragung auf Time_nanosleeep () zu übertragen.

  2. Zeitaufwändige Überlegung für die Anfrageausführung <br> In der realen Umgebung ist die Anfrage zeitaufwändig. Das Skript muss zuerst den zeitaufwändigen Prozess dieser Anforderung berechnen und dann die verbleibende Wartezeit basierend auf dem Mindestintervall abzüglich des zeitaufwändigen Vorgangs bestimmen.
    Dies vermeidet unnötiges Timeout Warten.

  3. Verwendung von time_nanoseep () <br> Der erste Parameter der Funktion ist Sekunden, der zweite Parameter ist Nanosekunde, beide müssen Ganzzahlen sein.
    Schlafen Sie mit dem Split -Wert, um die Genauigkeit zu gewährleisten.

  4. Anfordern URL -Ersatz <br> Im Code -Beispiel werden alle angeforderten Domainnamen durch gitbox.net ersetzt, was den Anforderungen entspricht.