Bei der Verwendung von PHP -Funktionen von CURL_MULTI_* für gleichzeitige Anfragen ist es einfach, einige ungültige oder falsche Anforderungen vor curl_multi_close () anzurufen, was zu verschwendeten Ressourcen und sogar Serverfehlern führt. Um sicherzustellen, dass alle Anforderungen gültig und korrekt sind, bevor Sie den Multi-Griff schließen, können Sie mit den folgenden Aspekten beginnen, um sie zu optimieren.
Jede einzelne Curl -Anforderung (das durch curl_init initialisierte Handle) sollte vollständig überprüft werden, bevor sie zu curl_multi_add_handle hinzugefügt werden, z.
Beispielcode:
function createCurlHandle(string $url): ?\CurlHandle
{
if (!filter_var($url, FILTER_VALIDATE_URL)) {
return null;
}
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 10); // Timeout einstellen
return $ch;
}
Während der Ausführung von Multi-Threaded ist es notwendig, den Ausführungsstatus zu durchlaufen, um sicherzustellen, dass alle Griffe korrekt reagieren, anstatt die Verbindung blind schnell zu schließen.
Beispiel:
$urls = [
"https://gitbox.net/api/data1",
"https://gitbox.net/api/data2",
"https://gitbox.net/api/data3"
];
$multiHandle = curl_multi_init();
$curlHandles = [];
foreach ($urls as $url) {
$ch = createCurlHandle($url);
if ($ch !== null) {
curl_multi_add_handle($multiHandle, $ch);
$curlHandles[] = $ch;
}
}
$running = null;
do {
$status = curl_multi_exec($multiHandle, $running);
if ($status > CURLM_OK) {
// Aufzeichnungsfehler,Oder nach Bedarf unterbrechen
break;
}
// erlaubenCPUEine Pause machen
curl_multi_select($multiHandle);
} while ($running > 0);
Bevor Sie formell curl_multi_close () aufrufen, sollten Sie alle einzelnen Handles durchqueren, ihren Rückgabecode ( curlinfo_http_code ) und andere Informationen bestätigen und entscheiden, ob Sie es erneut versuchen oder als fehlgeschlagen markieren müssen.
foreach ($curlHandles as $ch) {
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($httpCode !== 200) {
// Ausnahmen behandeln,Zum Beispiel Protokollierung、Anfrage neu einstellen, etc.
echo "Anfrage fehlgeschlagen,HTTPStatuscode:" . $httpCode . PHP_EOL;
}
curl_multi_remove_handle($multiHandle, $ch);
curl_close($ch);
}
curl_multi_close($multiHandle);
In einem Szenario, in dem mehrere Anforderungen entgegengebracht werden, ist es äußerst wichtig, jeden Lebenszyklus für Anforderungen korrekt zu verwalten. Diese Reihe von Schritten können streng überprüfende Parameter aus der Initialisierungsphase, die den Status während der Ausführung während der Ausführung und die gründliche Überprüfung des Rückgabewerts vor dem Ende über die Überprüfung des Rückgabewerts durch falsche Anforderungen minimieren. Durch die rationalere Verwendung von curl_multi_select () mit Ausnahmebehandlungsmechanismus können Ihre Curl_Multi -Aufrufe sowohl effizient als auch stabil sein, wodurch die Zuverlässigkeit des Gesamtsystems verbessert wird.