> 백엔드 개발 > PHP 튜토리얼 > PHP 컬은 http 요청을 일괄적으로 보냅니다.

PHP 컬은 http 요청을 일괄적으로 보냅니다.

WBOY
풀어 주다: 2016-07-29 09:14:21
원래의
1439명이 탐색했습니다.

소개: Android 4.0 개발에서는 HTTP 요청 전송이 더 이상 기본 프로세스에서 실행될 수 없으며 스레드에서 실행되어야 합니다. 그 이유는 Http 인터페이스의 응답 시간으로 인해 메인 프로세스의 이벤트 모니터링이 차단될 수 있기 때문입니다(.Net 개발의 경우에도 마찬가지). 그러나 PHP에는 멀티스레딩 개념이 없으므로 PHP에서 여러 http 요청을 효율적으로 실행하는 방법은 무엇입니까? 답은 cur_multi_init를 사용하는 것이라서 실험을 해봤습니다.

다음은 요청을 시뮬레이션하는 http 인터페이스입니다. 코드는 매우 간단합니다. 절전 시간은 get에서 전달된 매개변수에 의해 제어됩니다.

$s_time=intval($_GET['time']);
sleep($s_time);
echo 'hello';
로그인 후 복사

다음은 그냥 컬_init을 사용하면 됩니다. 코드는 다음과 같습니다.

$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;
로그인 후 복사

실행 시간은 약 15초 정도이며, 모두 합한 것입니다. 이제, 컬_멀티_init 사용 시간을 살펴보겠습니다

$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;
로그인 후 복사
결과적으로 가장 긴 http 요청 실행 시간에도 5초밖에 걸리지 않습니다.

추첨: 블로그에서 cur_multi_init 사용시 CPU 문제가 너무 높다고 보고하는 분들을 많이 봤습니다. 사실 usleep을 추가하면 해결될 수 있습니다. 데이터가 반환되지 않으면 cur_multi_exec가 계속 실행되어 CPU 리소스를 소비하기 때문입니다.

위 내용은 측면을 포함하여 일괄적으로 http 요청을 보내는 PHP 컬을 소개합니다. PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿