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';
$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;
$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;
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.