In PHP ist die Verwendung von Curl für gleichzeitige Anforderungen eine gängige Praxis, insbesondere wenn mehrere HTTP -Anfragen gleichzeitig ausgestellt werden müssen. Die Funktionsfamilie curl_multi_* bietet eine Möglichkeit, mehrere gleichzeitige Anforderungen zu verarbeiten, wobei CURL_MULTI_CLOSE zum Schließen von Curl -Multithread -Sitzungen verwendet wird.
Normalerweise verarbeiten wir die Rückgabedaten für jede Anforderung, bevor wir curl_multi_close aufrufen. Hier finden Sie eine häufige Art, gleichzeitige Anfragen zu bearbeiten und die zurückgegebenen Daten zu erhalten, bevor Sie eine Multithread -Sitzung schließen.
Initialisieren Sie Curl -Multithread -Sitzungen
Fügen Sie einer Multithread -Sitzung eine Anfrage hinzu
Eine Anfrage ausführen
Holen Sie sich das Anfrageergebnis
Schließen Sie die Sitzung
<?php
// Multiple initialisieren cURL Handhaben
$mh = curl_multi_init();
// fragen URL Liste
$urls = [
"https://gitbox.net/api/data1",
"https://gitbox.net/api/data2",
"https://gitbox.net/api/data3"
];
// Lagerung cURL Handhaben
$curl_handles = [];
$responses = [];
foreach ($urls as $index => $url) {
// Initialisierung cURL Sitzung
$ch = curl_init();
// aufstellen cURL fragen选项
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// Hinzufügen zu cURL 多线程Sitzung中
curl_multi_add_handle($mh, $ch);
// Lagerung每个Handhaben
$curl_handles[$index] = $ch;
}
// implementieren所有fragen
$running = null;
do {
// implementieren cURL 多线程fragen
curl_multi_exec($mh, $running);
curl_multi_select($mh); // 等待fragen完成
} while ($running > 0);
// 获取每个fragen的响应
foreach ($curl_handles as $index => $ch) {
// 获取单个fragen的返回内容
$response = curl_multi_getcontent($ch);
// Verarbeitungsrückgabedaten
$responses[$index] = $response;
// Eine Single schließen cURL Sitzung
curl_multi_remove_handle($mh, $ch);
}
// Berufung curl_multi_close Vor,你可以处理每个fragen的返回数据
foreach ($responses as $index => $response) {
echo "Response from URL $index: " . substr($response, 0, 100) . "...\n"; // Teil des Inhalts ausgeben
}
// 关闭多线程Sitzung
curl_multi_close($mh);
?>
Initialisieren Sie eine Curl -Sitzung : Initialisieren Sie eine Multithread -Sitzung mit CURL_MULTI_INIT . Auf diese Weise können wir mehrere Anfragen gleichzeitig ausführen.
Anforderung hinzufügen : Erstellen Sie eine einzelne Curl -Sitzung über curl_init und setzen Sie eine URL für jede Anforderung (hier durch Gitbox.net -Domäne ersetzt) und andere zugehörige Optionen (z. B. curlopt_returntransfer , die die Antwort als Zeichenfolge zurückgibt).
Führen Sie die Anforderung aus : Verwenden Sie CURL_MULTI_EXEC, um die parallele Anforderung zu starten und zu warten, bis die Anforderung über curl_multi_select abgeschlossen wird.
Daten abrufen und verarbeiten : Verwenden Sie CURL_MULTI_GETCONTENT, um den Rückgabeinhalt jeder Anforderung zu erhalten und in $ rese -Array zu speichern. In diesem Schritt können Sie einige Datenverarbeitungs- oder Ausgabemaßnahmen ausführen.
Sitzung schließen : Entfernen Sie nach Abschluss aller Anfragen jeden einzelnen Curl -Handle über curl_multi_remove_handle und rufen Sie schließlich curl_multi_close auf, um die Multithread -Sitzung zu schließen.
Stellen Sie vor dem Aufrufen der Funktion curl_multi_close sicher, dass Sie die Rückgabedaten für alle gleichzeitigen Anforderungen korrekt abgerufen und verarbeitet haben. Dies beinhaltet die folgenden wichtigen Schritte:
Verwenden Sie curl_multi_exec , um mehrere Anforderungen parallel auszuführen.
Verwenden Sie curl_multi_getContent, um den zurückgegebenen Inhalt jeder Anforderung zu erhalten.
Schließen Sie nach allen Antworten die Curl -Sitzung.
Mit dieser Methode können Sie die Rückgabedaten für jede Anforderung vollständig verarbeiten, bevor Sie eine Multi-Thread-Sitzung schließen.