Aktueller Standort: Startseite> Neueste Artikel> Wie schließe ich effiziente parallele Anfragen mit curl_multi_exec mit curl_multi_info_read ab? Was sind die detaillierten Schritte?

Wie schließe ich effiziente parallele Anfragen mit curl_multi_exec mit curl_multi_info_read ab? Was sind die detaillierten Schritte?

gitbox 2025-06-06

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.


Was sind curl_multi_exec und curl_multi_info_read?

  • 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.


Grundlegende Ideen für parallele Anfragen

  1. Initialisieren Sie mehrere einzelne Curl -Anforderungen (Curl -Handles).

  2. Erstellen Sie einen Multiplex -Griff.

  3. Fügen Sie alle einzelnen Anfragen zum Multiplex -Griff hinzu.

  4. Rufen Sie curl_multi_exec auf, um alle Anforderungen auszuführen.

  5. Erkennen Sie kontinuierlich, ob eine Anforderung über curl_multi_info_read abgeschlossen wurde.

  6. Verarbeiten Sie das Ergebnis der Abschlussanfrage.

  7. Ressourcen aufräumen.


Detaillierte Schritte und Beispielcode

 <?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);
?>

Code Beschreibung

  • 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).


Dinge zu beachten

  • 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.