Heim > Backend-Entwicklung > PHP-Tutorial > PHP Curl sendet HTTP-Anfragen in Stapeln

PHP Curl sendet HTTP-Anfragen in Stapeln

WBOY
Freigeben: 2016-07-29 09:14:21
Original
1438 Leute haben es durchsucht

Einführung: In der Android 4.0-Entwicklung darf das Senden von HTTP-Anfragen nicht mehr im Hauptprozess ausgeführt werden, sondern muss in einem Thread ausgeführt werden. Der Grund dafür ist, dass die Antwortzeit der HTTP-Schnittstelle möglicherweise die Ereignisüberwachung des Hauptprozesses blockiert (dasselbe gilt für die .NET-Entwicklung). Da PHP jedoch nicht über das Konzept des Multithreadings verfügt, stellt sich die Frage, wie mehrere http-Anfragen in PHP effizient ausgeführt werden können. Die Antwort ist, curl_multi_init zu verwenden, also habe ich ein Experiment durchgeführt.

Das Folgende ist die http-Schnittstelle, die die Anforderung simuliert. Die Ruhezeit wird durch den von get übergebenen Parameter gesteuert.

$s_time=intval($_GET['time']);
sleep($s_time);
echo 'hello';
Nach dem Login kopieren

Als nächstes verwenden Sie einfach curl_init. Der Code lautet wie folgt:

$start=microtime(true);
for($i=1;$i<=5;++$i)
{
	$ch=curl_init("http://test.binbin.com/curl/test.php?time={$i}");
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
	curl_exec($ch);
}
$end=microtime(true);
echo $end-$start;
Nach dem Login kopieren

Die Ausführungszeit beträgt etwa 15 Sekunden, was die Summe aller ist Schauen wir uns nun die Zeit der Verwendung von curl_multi_init an

$start=microtime(true);
$ch_list=array();
$multi_ch=curl_multi_init();
for($i=1;$i<=5;++$i)
{
	$ch_list[$i]=curl_init("http://test.binbin.com/curl/test.php?time={$i}");
	curl_setopt($ch_list[$i], CURLOPT_RETURNTRANSFER, true);
	curl_multi_add_handle($multi_ch, $ch_list[$i]);
}
$running=false;
do {
        usleep(10000);
	curl_multi_exec($multi_ch, $running);
}while ($running>0);

$end=microtime(true);
echo $end-$start;
Nach dem Login kopieren
Das Ergebnis ist, dass es nur 5 Sekunden dauert, selbst die Ausführungszeit der längsten http-Anfrage.

Postscript: Ich habe viele Leute gesehen, die im Blog berichteten, dass die CPU-Auslastung von curl_multi_init zu hoch sei. Tatsächlich kann das Problem durch Hinzufügen von usleep gelöst werden. Denn wenn die Daten nicht zurückgegeben werden, wird curl_multi_exec weiterhin ausgeführt und verbraucht CPU-Ressourcen.

Das Obige stellt PHP Curl vor, um http-Anfragen in Stapeln zu senden, einschließlich einiger Aspekte. Ich hoffe, es wird für Freunde hilfreich sein, die sich für PHP-Tutorials interessieren.

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage