Curl ist ein sehr häufiges und leistungsstarkes Werkzeug, wenn sie PHP verwenden, um gleichzeitige HTTP -Anforderungen zu verarbeiten. Um die Effizienz zu verbessern, verwenden wir normalerweise die Funktionsreihen von CURL_MULTI_*, um mehrere gleichzeitige Anforderungen zu initiieren. Nach Abschluss aller Anfragen ist es sehr wichtig, jeden Anforderungshandle korrekt zu schließen, genau das, was curl_close () tut. In diesem Artikel wird detailliert erklärt, wie Sie curl_close () mit curl_multi_exec ( ) in einem PHP -Skript verwenden, um mehrere gleichzeitige Anforderungen zu beenden.
Zunächst müssen wir mehrere Curl-Handles erstellen und eine Multi-Griff-Ressource über curl_multi_add_handle () hinzufügen.
$urls = [
"https://gitbox.net/api/service1",
"https://gitbox.net/api/service2",
"https://gitbox.net/api/service3"
];
$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;
}
In diesem Code fügen wir drei URLs als drei separate Curl-Anforderungen hinzu und fügen sie einer Multi-Griff-Ressource $ multihandle hinzu.
Nach dem Hinzufügen aller Griffe verarbeiten wir die Ausführung dieser Anforderungen über curl_multi_exec () und curl_multi_select () :
$running = null;
do {
curl_multi_exec($multiHandle, $running);
curl_multi_select($multiHandle);
} while ($running > 0);
Diese Schleife wird weiter ausgeführt, bis alle gleichzeitigen Anfragen abgeschlossen sind. curl_multi_exec () initiiert tatsächlich die Anforderung, während curl_multi_select () verwendet wird, um auf die aktive Verbindung zu warten, um den CPU -Leerlauf zu vermeiden.
Nach Abschluss der Ausführung möchten Sie möglicherweise das Ergebnis jeder Anfrage erhalten:
$responses = [];
foreach ($curlHandles as $ch) {
$responses[] = curl_multi_getcontent($ch);
}
Nach Abschluss der Anfrage müssen wir sicherstellen, dass alle Ressourcen veröffentlicht werden, einschließlich der einzelnen Curl-Anfragen und der Multi-Griff-Ressource selbst. Hier kommt CURL_CLOSE () ins Spiel:
foreach ($curlHandles as $ch) {
curl_multi_remove_handle($multiHandle, $ch);
curl_close($ch);
}
curl_multi_close($multiHandle);
Im obigen Code verwenden wir eins nach eins curl_multi_remove_handle () , um jeden Handle aus der Multi-Griff-Ressource zu entfernen, und verwenden dann curl_close () , um sie zu schließen und schließlich die Multi-Handle-Ressource selbst zu schließen.
Die Verwendung von curl_close () zur korrekten Freigabe von Ressourcen ist ein Schritt, der nach der Verarbeitung gleichzeitiger Anforderungen nicht ignoriert werden kann. Das Folgende ist eine vollständige Zusammenfassung des Verarbeitungsprozesses:
Initialisieren Sie mehrere Curl -Anforderungen;
Fügen Sie einer Multi-Griff-Ressource einen Griff hinzu.
Verwenden Sie curl_multi_exec (), um gleichzeitige Anforderungen zu verarbeiten.
Verwenden Sie curl_multi_getContent (), um das Ergebnis (optional) zu erhalten.
Verwenden Sie curl_close () und curl_multi_close (), um alle Griffe und Ressourcen zu schließen.
Mit den oben genannten Methoden können Sie mehrere gleichzeitige Anforderungen in einem einzigen PHP -Skript effizient und anmutig verwalten, um sicherzustellen, dass die Systemressourcen nicht verschwendet werden.