老版地址(仅作固定作用):old.jincong.net

浅谈php使用curl模拟多线程发送请求

每个PHP文件的执行是单线程的,但是php本身也可以用一些别的技术实现多线程并发比如用php-fpm进程,这里用cul模拟多线程发送请求。php的cul多线程是通过不断调用cul_muli_exec来获取内容,这里举一个demo......
以下是【金聪采编】分享的内容全文:

每个PHP文件的执行是单线程的,但是php本身也可以用一些别的技术实现多线程并发比如用php-fpm进程,这里用curl模拟多线程发送请求。php的curl多线程是通过不断调用curl_multi_exec来获取内容,这里举一个demo来模拟一次curl多线程并发操作。

//设置缓冲为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);

我再服务器上建立一起请求的php页面命名为test.php,内容如下

1 sleep(10);2 echo 'seccess';exit;

表示等待十秒后数据下面语句。
然后我在命令行执行该程序结果如下:

上面代码中通过循环$curl_Arr数组来调用curl_multi_getcontent来查询是否有数据。有数据就输出并删除元素,直到$curl_Arr数组元素个数为0。
该模拟多线程实现是通过使用curl的curl_multi系列函数能实现此功能的。至于该系列函数使用介绍,百度一搜一大把。这里就不做说明了。

以上所述是小编给大家介绍的php使用curl模拟多线程发送请求详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对金聪精品网站的支持!

金聪线报提示:[ 浅谈php使用curl模拟多线程发送请求 ] 仅为会员分享交流,仅供学习、参考使用,请勿用于其他用途,如果想商业使用或者代理,请自行联系版权方获取授权。任何未获取授权的商业使用与本站无关,请自行承担相应责任。
本站不存储任何资源文件,敬请周知!
此资源仅供个人学习、研究使用,禁止非法转播或商业用途,请在获取后24小时内删除,如果你觉得满意,请寻求购买正版或获取授权!
免责申明:本站仅提供学习的平台,所有资料均来自于网络分享线索,版权归原创者所有!本站不提供任何保证,并不承担任何法律责任,如果对您的版权或者利益造成损害,请提供相应的资质证明,我们将于3个工作日内予以处理。版权申诉相关说明
本网站采用 BY-NC-SA 协议进行授权 转载请注明原文链接:浅谈php使用curl模拟多线程发送请求
221381
领取福利

微信扫码领取福利

微信扫码分享