>  기사  >  백엔드 개발  >  다중 스레드 요청을 시뮬레이션하기 위해 컬을 사용하는 PHP 코드 예제

다중 스레드 요청을 시뮬레이션하기 위해 컬을 사용하는 PHP 코드 예제

不言
不言앞으로
2018-11-17 17:19:252114검색

이 기사의 내용은 컬을 사용하여 멀티스레딩을 시뮬레이션하여 요청을 보내는 코드 예제에 관한 것입니다. 도움이 필요한 친구들이 참고할 수 있기를 바랍니다.

각 PHP 파일의 실행은 단일 스레드이지만 PHP 자체는 php-fpm 프로세스 사용과 같은 일부 다른 기술을 사용하여 다중 스레드 동시성을 달성할 수도 있습니다. 여기서는 멀티스레딩을 시뮬레이션하는 데 사용됩니다. PHP의 컬 멀티스레딩은 컬 멀티스레딩 동시 작업을 시뮬레이션하는 데모입니다.

//设置缓冲为0(也可以去php.ini设置)
ini_set('output_buffering', 0);
//打开输出缓冲区
ob_start();
//设置一个空数组
$curl_Arr=[];
//这里模拟20次请求
for($i=0;$i<20;$i++){
    //开启curl连接
    $curl_Arr[$i]=curl_init("http://XXXX/test.php");
    //CURLOPT_RETURNTRANSFER 设置为1表示稍后执行的curl_exec函数的返回是URL的返回字符串,而不是把返回字符串定向到标准输出并返回TRUE;
    curl_setopt($curl_Arr[$i],CURLOPT_RETURNTRANSFER,1);
}

//创建批处理cURL句柄
$mh = curl_multi_init();

foreach($curl_Arr as $k => $ch){
    //curl句柄入栈增加
    curl_multi_add_handle($mh,$ch);
}
$active = null;
while(count($curl_Arr)>0){
    //发起curl_multi请求
    @curl_multi_exec($mh,$active);
    foreach($curl_Arr as $k => $ch){
        //获取句柄的返回值
        if($result[$k]= curl_multi_getcontent($ch)){
            //输出结果
            echo "$result[$k]\n";
            ob_flush();
            //把被释放的数据发送到浏览器
            flush();
            //关闭该句柄
            curl_multi_remove_handle($mh,$ch);
            unset($curl_Arr[$k]);
        }
    }
}
//关闭ouput_buffering机制
ob_end_flush();
//关闭"curl_mulit"句柄
curl_multi_close($mh);

test.php라는 서버에 요청한 PHP 페이지를 만들었습니다. 내용은 다음과 같습니다

#🎜 🎜 #

1 sleep(10);
2 echo &#39;seccess&#39;;exit;

은 10초를 기다린 후 다음 명령문을 의미합니다.

그런 다음 명령줄에서 프로그램을 실행하면 결과는 다음과 같습니다.

위 코드에서 컬_multi_getcontent 데이터가 있는지 쿼리하기 위해 $curl_Arr 배열을 반복하여 호출됩니다. 데이터가 있으면 $curl_Arr 배열의 요소 수가 0이 될 때까지 요소를 출력하고 삭제합니다.

이 시뮬레이션된 멀티 스레드 구현은 컬의 일련의 함수인 cur_multi를 사용하여 이 기능을 달성할 수 있습니다. 이 일련의 기능 사용에 대한 소개는 Baidu에서 많이 검색할 수 있습니다. 여기에는 설명이 제공되지 않습니다.

위 내용은 다중 스레드 요청을 시뮬레이션하기 위해 컬을 사용하는 PHP 코드 예제의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 cnblogs.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제