In PHP ist die Verwendung von CURL für HTTP -Anforderungen sehr häufig, insbesondere wenn Anforderungen an mehrere externe Dienste gesendet werden müssen, bietet Curl eine sehr leistungsstarke Möglichkeit, diese Funktionalität zu implementieren. Standardmäßig unterstützt Curl jedoch nur synchrone Anfragen, dh jedes Mal, wenn eine Anfrage gesendet wird, wartet PHP, bis die Anfrage abgeschlossen ist, bevor die nächste Anfrage weiter bearbeitet wird.
Wenn wir jedoch gleichzeitig Anfragen an mehrere Dienste senden müssen, kann dieser synchronisierte Ansatz zu erheblichen Leistungs Engpässen führen, insbesondere wenn die Anzahl der Anfragen groß ist. Um die gleichzeitige Ausführungseffizienz von Anforderungen zu verbessern, können wir die Funktionsgruppe curl_multi_* verwenden. Eine der kritischsten Funktionen ist curl_multi_close .
curl_multi_close ist Teil der Curl-Multi-Request-Bibliothek in PHP, die den Curl-Griff schließt und die Ressourcen befreit. Es wird normalerweise verwendet, nachdem mehrere gleichzeitige Anforderungen mit Curl_Multi_exec durchgeführt werden. Auf diese Weise kann der Lebenszyklus mehrerer gleichzeitiger Anforderungen effizienter verwaltet werden, wodurch die Leistung verbessert wird, insbesondere bei der Verarbeitung mehrerer Netzwerkanforderungen.
Unter der Annahme, dass wir mehrere URLs haben, die anfordern müssen, können wir diese Anfragen über die Funktion curl_multi_* gleichzeitig ausführen. Das Folgende ist ein PHP -Beispielcode, der Curl_Multi_Close verwendet, um die Effizienz der Anfrage zu verbessern:
<?php
// Initialisieren Sie mehrere Anfragen cURL Handhaben
$urls = [
"http://gitbox.net/api/endpoint1",
"http://gitbox.net/api/endpoint2",
"http://gitbox.net/api/endpoint3",
"http://gitbox.net/api/endpoint4"
];
$multiHandle = curl_multi_init();
$curlHandles = [];
// Für jeden URL Erstellen Sie eine separate cURL Handhaben
foreach ($urls as $url) {
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_multi_add_handle($multiHandle, $ch);
$curlHandles[] = $ch;
}
// Führen Sie alle Anfragen aus
$running = null;
do {
curl_multi_exec($multiHandle, $running);
curl_multi_select($multiHandle); // Warten Sie, um eine Anfrage zu vervollständigen
} while ($running);
// Holen Sie sich den Antwortinhalt
foreach ($curlHandles as $ch) {
$response = curl_multi_getcontent($ch);
echo $response . "\n"; // Ausgabemitteilungsinhalt
}
// Schließung cURL Handhaben
foreach ($curlHandles as $ch) {
curl_multi_remove_handle($multiHandle, $ch);
curl_close($ch);
}
// Ressourcen frei machen
curl_multi_close($multiHandle);
?>
Initialisieren Sie Curl -Handles : Wir erstellen zuerst einen separaten Curl -Handle für jede URL, um diese Handles zur mehrfachen Curl -Sitzung zu fordern.
Führen Sie gleichzeitige Anfragen aus : Alle Anfragen werden asynchron über curl_multi_exec ausgeführt. Es wird kontinuierlich ausgeführt, bis alle Anfragen abgeschlossen sind. curl_multi_select lässt das Programm auf eine Anfrage warten, wodurch der gesamte Prozess nicht blockiert wird.
Antwortdaten abrufen : Nachdem alle Anforderungen abgeschlossen sind, erhalten Sie den Antwortinhalt jeder Anforderung über curl_multi_getContent .
Schließen und sauber : Entfernen Sie und schließen Sie jeden einzelnen Curl -Handle und schließen Sie sie dann mit curl_multi_close , um die Ressourcen der mehrfachen Curl -Sitzungsgriffe zu veröffentlichen.
curl_multi_close schließt nicht nur das Handle mit mehreren Sitzungen, sondern stellt auch sicher, dass alle Curl -Ressourcen korrekt veröffentlicht werden. In langjährigen Skripten kann die rationale Verwendung von curl_multi_close effektiv verhindern und die Programmstabilität verbessern.
Gleichzeitige Ausführung : Traditionelle synchrone Anforderungen werden nacheinander ausgeführt, während die Funktion curl_multi_* ermöglicht, mehrere Anforderungen parallel auszuführen, wodurch die Effizienz der Ausführung erheblich verbessert wird, insbesondere wenn Anforderungen an mehrere verschiedene URLs gesendet werden müssen.
Nicht blockierende I/O : Durch die Zusammenarbeit von CURL_MULTI_SELECT und CURL_MULTI_EXEC kann PHP weiterhin andere Anforderungen bearbeiten, während sie auf eine Anfrage zum Ansprechen warten, wodurch das Problem der Blockierung und Warten vermieden wird.
Ressourcenveröffentlichung : Durch die Verwendung von curl_multi_close vernünftigerweise können Ressourcen rechtzeitig veröffentlicht werden, nachdem die Anforderung abgeschlossen ist, wodurch Speicherlecks und andere Probleme vermieden werden.
curl_multi_close spielt eine entscheidende Rolle bei der gleichzeitigen Ausführung mehrerer HTTP -Anforderungen. Durch die Verwendung von curl_multi_exec und curl_multi_close s können PHP -Entwickler die Effizienz von Anwendungen bei der Bearbeitung mehrerer Anforderungen erheblich verbessern und sicherstellen, dass die Ressourcen effektiv verwaltet werden. Für Szenarien, in denen hohe gleichzeitige Anfragen erforderlich sind, ist die Verwendung mehrerer Verarbeitungsfunktionen von Curl eine sehr effektive Optimierungsmethode.