In der Entwicklung müssen wir häufig HTTP -Anforderungen an mehrere Server oder APIs einleiten. Wenn Sie nach der herkömmlichen Einzel-Threading-Methode nacheinander anfordern, ist dies nicht nur langsam, sondern auch Server-Ressourcen. PHP liefert eine Curl- Erweiterung, wobei die Funktionen curl_multi_exec und curl_multi_close es uns ermöglichen können, eine gleichzeitige Verarbeitung mit mehreren Anforderungen zu implementieren, wodurch die Effizienz erheblich verbessert wird.
In diesem Artikel wird detailliert eingeführt, wie Sie curl_exec in Kombination mit curl_multi_close für eine effiziente Parallelitätsverarbeitung verwenden und einen spezifischen Beispielcode angeben.
Curl_exec () : Führen Sie eine einzelne Curl -Anforderung aus.
curl_multi_exec () : Führen Sie mehrere Curl -Handles gleichzeitig aus.
curl_multi_close () : Schließen Sie ein Curl -Batch -Handle und geben Sie die Ressource frei.
Wenn Sie eine große Anzahl von Anfragen gleichzeitig bearbeiten müssen, wird empfohlen, Curl_Multi_exec zu verwenden, anstatt für jede Anforderung separat auf Curl_exec aufzurufen. curl_multi_close ist ein wichtiger Schritt, um Ressourcen zu bereinigen, nachdem alle Anfragen bearbeitet wurden.
Hier ist ein einfaches Beispiel, das zeigt, wie mehrere Schnittstellen gleichzeitig anfordern und Antworten verarbeiten:
<?php
// AnfordernURLListe
$urls = [
"https://gitbox.net/api/data1",
"https://gitbox.net/api/data2",
"https://gitbox.net/api/data3",
];
// Multiple initialisierencURLHandhaben
$multiHandle = curl_multi_init();
$curlHandles = [];
foreach ($urls as $url) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_multi_add_handle($multiHandle, $ch);
$curlHandles[] = $ch;
}
// Führen Sie alle Anfragen aus
$running = null;
do {
$status = curl_multi_exec($multiHandle, $running);
if ($status > 0) {
// Ein Fehler ist aufgetreten
echo "cURL error: " . curl_multi_strerror($status);
break;
}
// Warten auf eine aktive Verbindung
curl_multi_select($multiHandle);
} while ($running > 0);
// Verarbeiten Sie die Antwort jeder Anfrage
foreach ($curlHandles as $ch) {
$response = curl_multi_getcontent($ch);
$info = curl_getinfo($ch);
if (curl_errno($ch)) {
echo 'Request Error: ' . curl_error($ch) . PHP_EOL;
} else {
echo 'HTTP Code: ' . $info['http_code'] . PHP_EOL;
echo 'Response: ' . $response . PHP_EOL;
}
curl_multi_remove_handle($multiHandle, $ch);
curl_close($ch);
}
// Schließungmulti handle
curl_multi_close($multiHandle);
?>
Erstellen Sie zunächst einen Multi-Griff über curl_multi_init () .
Fügen Sie nach dem separaten Einstellen jeder Locken den Multi -Handle über curl_multi_add_handle () hinzu.
Verwenden Sie curl_multi_exec () , um alle Anforderungen auszuführen, und die Umfragen, bis alle Anforderungen abgeschlossen sind.
curl_multi_select () kann die CPU -Müßigkeit verringern und die Effizienz verbessern.
Verwenden Sie nach Abschluss der Anforderung curl_multi_getContent () , um den Antwortinhalt zu erhalten.
Denken Sie schließlich daran, curl_multi_remove_handle () zu verwenden, um das Handle zu entfernen und das Multi -Handle mit CURL_MULTI_CLOSE () zu schließen, um die Ressource freizugeben.
Anzahl der gleichzeitigen : Wenn zu viele URLs für einmalige Anfragen vorhanden sind, wird empfohlen, sie in Chargen zu verarbeiten, z.
Timeout-Handhabung : curlopt_timeout oder curlopt_connectTimeout kann festgelegt werden, um langfristige Hänge einiger Anfragen zu vermeiden.
Fehlerbehandlung : Verwenden Sie Curl_errno () und curl_error (), um zu überprüfen, ob eine einzelne Anforderung fehlerfrei ist.
Verbindungswiederverwendung : Das Einschalten von curlopt_forbid_reuse kann eine häufige Erstellung von TCP -Verbindungen vermeiden und die Leistung verbessern.
Durch die Kombination von Curl_exec und curl_multi_close können wir eine große Anzahl von HTTP -Anforderungen in PHP effizient verarbeiten. Diese Methode verkürzt nicht nur die Anforderungszeit, sondern nutzt auch die Parallelitätsfunktionen des Servers voll. Es ist eine der wesentlichen Fähigkeiten, um Hochleistungs-PHP-Anwendungen aufzubauen.
Durch die Beherrschung dieser Grundlagen können Sie Ihre PHP -Anwendung schneller und stabiler machen!