소개: Android 4.0 개발에서는 HTTP 요청 전송이 더 이상 기본 프로세스에서 실행될 수 없으며 스레드에서 실행되어야 합니다. 그 이유는 Http 인터페이스의 응답 시간으로 인해 메인 프로세스의 이벤트 모니터링이 차단될 수 있기 때문입니다(.Net 개발의 경우에도 마찬가지). 그러나 PHP에는 멀티스레딩 개념이 없으므로 PHP에서 여러 http 요청을 효율적으로 실행하는 방법은 무엇입니까? 답은 cur_multi_init를 사용하는 것이라서 실험을 해봤습니다.
다음은 요청을 시뮬레이션하는 http 인터페이스입니다. 코드는 매우 간단합니다. 절전 시간은 get에서 전달된 매개변수에 의해 제어됩니다.
$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;
추첨: 블로그에서 cur_multi_init 사용시 CPU 문제가 너무 높다고 보고하는 분들을 많이 봤습니다. 사실 usleep을 추가하면 해결될 수 있습니다. 데이터가 반환되지 않으면 cur_multi_exec가 계속 실행되어 CPU 리소스를 소비하기 때문입니다.
위 내용은 측면을 포함하여 일괄적으로 http 요청을 보내는 PHP 컬을 소개합니다. PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.