Asynchrone Curl-Anfrage in PHP
Das gleichzeitige Ausführen mehrerer Curl-Anfragen kann in PHP eine Herausforderung sein. In diesem Artikel untersuchen wir verschiedene Ansätze, um mithilfe integrierter Funktionen und externer Bibliotheken eine asynchrone Ausführung zu erreichen.
cURL-Multithreading
Die Funktionen „curl_multi_*“ von PHP ermöglichen dies zur asynchronen Ausführung mehrerer cURL-Anfragen. Hier ist ein Beispiel:
curl_multi_init();
$mh = curl_multi_init();
$ch1 = curl_init();
curl_setopt($ch1, CURLOPT_URL, 'http://example.com/endpoint');
curl_multi_add_handle($mh, $ch1);
$ch2 = curl_init();
curl_setopt($ch2, CURLOPT_URL, 'http://example.com/endpoint2');
curl_multi_add_handle($mh, $ch2);
$active = null;
do {
$mrc = curl_multi_exec($mh, $active);
} while ($mrc == CURLM_CALL_MULTI_PERFORM);
while ($active && $mrc == CURLM_OK) {
if (curl_multi_select($mh) != -1) {
do {
$mrc = curl_multi_exec($mh, $active);
} while ($mrc == CURLM_CALL_MULTI_PERFORM);
}
}
curl_multi_remove_handle($mh, $ch1);
curl_multi_remove_handle($mh, $ch2);
curl_multi_close($mh);
pthreads
Die pthreads-Bibliothek ermöglicht Multithread-Programmierung in PHP. Mit pthreads können asynchrone Curl-Anfragen wie folgt erreicht werden:
class RequestThread extends Thread {
public function run() {
$ch = curl_init();
// ... set cURL options here
curl_exec($ch);
curl_close($ch);
}
}
$thread = new RequestThread();
$thread->start();
Parallele Ausführung mit Bibliothek
Es gibt auch Bibliotheken, die speziell für die parallele Ausführung in PHP entwickelt wurden, wie etwa parallel-functions und parallel- Anfrage. Hier ist ein Beispiel für die Verwendung der Parallel-Request-Bibliothek:
use Parallel\{Task, Runtime};
$runtime = new Runtime;
$tasks = [
new Task(function () {
// ... cURL request 1
}),
new Task(function () {
// ... cURL request 2
}),
];
$runtime->run($tasks);
Überlegungen
Bei der Ausführung asynchroner Anforderungen ist es wichtig, die Ressourcengrenzen des Servers und mögliche Engpässe zu berücksichtigen. Es ist auch wichtig, Fehler und Ausnahmen zu behandeln, die während der Ausführung auftreten können.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3