主页 > 知识库 > 浅谈php使用curl模拟多线程发送请求

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

热门标签:地图标注风向标 临沂智能电销机器人软件 上海公司外呼系统线路 芒果电销机器人 安阳自动外呼系统价格是多少 电梯外呼线路板维修视频 银川ai电话机器人 十堰ai电话机器人效果怎么样 浙江外呼电话系统软件

每个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;$i20;$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实现多线程
  • php使用curl_init()和curl_multi_init()多线程的速度比较详解
  • PHP多线程模拟实现秒杀抢单
  • PHP7多线程搭建教程
  • PHP中多线程的两个实现方法
  • php与python实现的线程池多线程爬虫功能示例
  • php多线程并发实现方法
  • php中foreach结合curl实现多线程的方法分析
  • 如何用PHP实现多线程编程

标签:常州 徐州 武威 吐鲁番 荆门 遵义 宁夏 遂宁

巨人网络通讯声明:本文标题《浅谈php使用curl模拟多线程发送请求》,本文关键词  浅谈,php,使用,curl,模拟,;如发现本文内容存在版权问题,烦请提供相关信息告之我们,我们将及时沟通与处理。本站内容系统采集于网络,涉及言论、版权与本站无关。
  • 相关文章
  • 下面列出与本文章《浅谈php使用curl模拟多线程发送请求》相关的同类信息!
  • 本页收集关于浅谈php使用curl模拟多线程发送请求的相关信息资讯供网民参考!
  • 推荐文章