In PHP sind curl_multi_exec und curl_multi_info_read sehr praktische Funktionen, wenn Sie gleichzeitig mehrere HTTP -Anforderungen einleiten müssen und diese Anfragen parallel effizient ausgeführt werden sollen. In diesem Artikel wird ausführlich eingeführt, wie diese beiden Funktionen verwendet werden, um effiziente parallele Anfragen zu erfüllen und spezifische Codebeispiele anzugeben.
CURL_MULTI_EXEC : Wird verwendet, um einen Satz von Curl -Handles auszuführen, um Multiplexing zu implementieren. Es führt alle gemeinsamen Anfragen parallel aus.
CURL_MULTI_INFO_READ : Wird verwendet, um Informationen zu ausgefüllten Anforderungen zu erhalten, und können feststellen, ob die Anforderung beendet ist, wodurch das entsprechende Ergebnis verarbeitet wird.
Initialisieren Sie mehrere einzelne Curl -Anforderungen (Curl -Handles).
Erstellen Sie einen Multiplex -Griff.
Fügen Sie alle einzelnen Anfragen zum Multiplex -Griff hinzu.
Rufen Sie curl_multi_exec auf, um alle Anforderungen auszuführen.
Erkennen Sie kontinuierlich, ob eine Anforderung über curl_multi_info_read abgeschlossen wurde.
Verarbeiten Sie das Ergebnis der Abschlussanfrage.
Ressourcen aufräumen.
<?php
// AnfordernURLListe
$urls = [
'http://gitbox.net/api/endpoint1',
'http://gitbox.net/api/endpoint2',
'http://gitbox.net/api/endpoint3',
];
// Initialisierung multi handle
$multiHandle = curl_multi_init();
$curlHandles = [];
// 1. Erstellen Sie eine SinglecurlHandhaben,Und beitretenmultiHandhaben
foreach ($urls as $url) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // Rückgabeergebnisse anstelle einer direkten Ausgabe zurückgeben
curl_multi_add_handle($multiHandle, $ch);
$curlHandles[] = $ch;
}
// 2. Führen Sie alle Anfragen aus
$running = null;
do {
// Eine Anfrage ausführen
curl_multi_exec($multiHandle, $running);
// Optional:Warten auf eine aktive Verbindung,verhindernCPUZu hohe Belegung
curl_multi_select($multiHandle);
// 3. Überprüfen Sie, ob eine abgeschlossene Anfrage vorliegt
while ($info = curl_multi_info_read($multiHandle)) {
if ($info['msg'] === CURLMSG_DONE) {
$handle = $info['handle'];
// Inhalte bekommen
$content = curl_multi_getcontent($handle);
// Verarbeitungsrückgabeinhalt,Zum Beispiel Druck oder Parsen
echo "Anfrage vollständig,Inhaltslänge:" . strlen($content) . "\n";
// 移除完成的Handhaben,Ressourcen frei machen
curl_multi_remove_handle($multiHandle, $handle);
curl_close($handle);
}
}
} while ($running > 0);
// 4. SchließungmultiHandhaben
curl_multi_close($multiHandle);
?>
curl_multi_init () : initialisieren Sie den Multiplex -Griff.
CURL_MULTI_ADD_HANDLE () : Fügt jeden einzelnen angeforderten Curl -Handle zum Multi -Handle hinzu.
curl_multi_exec () : Führen Sie alle Anfragen aus.
curl_multi_select () : Warten Sie auf eine aktive Verbindung, um das Leerlauf von CPU zu vermeiden.
CURL_MULTI_INFO_READ () : Lesen Sie die relevanten Informationen der Abschlussanforderung und bestimmt, ob die Anfrage beendet ist.
curl_multi_remove_handle () und curl_close () : Ressourcen aufräumen, um Speicherlecks zu vermeiden.
Schleife, bis alle Anfragen abgeschlossen sind ( $ Running wird 0).
Die Anzahl der parallelen Anfragen sollte nicht zu groß sein, um übermäßige Serverdruck oder Systemressourcengpässe zu vermeiden.
Verwenden Sie curl_multi_select (), um zu warten, um zu verhindern, dass das Programm in eine hohe CPU -Verwendung fällt.
Achten Sie bei der Verarbeitung zurückgegebener Inhalte auf die Fehlerprüfung, um sicherzustellen, dass die Anfrage erfolgreich ist.
Wenn Sie komplexe Anforderungen wie Post, Header und Authentifizierung einleiten müssen, können Sie bei der Initialisierung eines einzelnen Curl -Handels entsprechende Optionen festlegen.