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


Posted in PHP onMarch 08, 2019

每个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;

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

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

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

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

PHP 相关文章推荐
php更新mysql后获取影响的行数发生异常解决方法
Mar 28 PHP
在PHP中设置、使用、删除Cookie的解决方法
May 06 PHP
PHP中批量生成静态html(命令行下运行PHP)
Apr 19 PHP
php使用Jpgraph绘制3D饼状图的方法
Jun 10 PHP
PHP+Javascript实现在线拍照功能实例
Jul 18 PHP
PHP进行批量任务处理不超时的解决方法
Jul 11 PHP
php微信公众号开发模式详解
Nov 28 PHP
curl 出现错误的调试方法(必看)
Feb 13 PHP
PHP封装的page分页类定义与用法完整示例
Dec 24 PHP
Laravel框架基于ajax和layer.js实现无刷新删除功能示例
Jan 17 PHP
laravel框架查询数据集转为数组的两种方法
Oct 10 PHP
PHP实现倒计时功能
Nov 16 PHP
PHP htmlspecialchars()函数用法与实例讲解
Mar 08 #PHP
浅谈PHP进程管理
Mar 08 #PHP
PHP多进程通信-消息队列使用
Mar 08 #PHP
浅谈PHP匿名函数和闭包
Mar 08 #PHP
使用PHPUnit进行单元测试并生成代码覆盖率报告的方法
Mar 08 #PHP
ThinkPHP中图片按比例切割的代码实例
Mar 08 #PHP
PHP的微信支付接口使用方法讲解
Mar 08 #PHP
You might like
php对包含html标签的字符串进行截取的函数分享
2014/06/19 PHP
php对关联数组循环遍历的实现方法
2015/03/13 PHP
PHP中isset与array_key_exists的区别实例分析
2015/06/02 PHP
thinkPHP5.0框架模块设计详解
2017/03/18 PHP
Laravel统计一段时间间隔的数据方法
2019/10/09 PHP
用Javascript做flash做的事..才完成的一个类.Auntion Action var 0.1
2007/02/23 Javascript
才发现的超链接js导致网页中GIF动画停止的解决方法
2007/11/02 Javascript
jquery1.4.2 for Visual studio 2010 模板文件
2010/07/14 Javascript
jquery的extend和fn.extend的使用说明
2011/01/09 Javascript
jquery调用asp.net 页面后台的实现代码
2011/04/27 Javascript
js判断浏览器类型的方法
2013/08/07 Javascript
javascript中typeof的使用示例
2013/12/19 Javascript
jquery表单插件Autotab使用方法详解
2016/06/24 Javascript
Bootstrap CSS布局之按钮
2016/12/17 Javascript
jQuery实现菜单栏导航效果
2017/08/15 jQuery
AngularJS实现图片上传和预览功能的方法分析
2017/11/08 Javascript
javascript按顺序加载运行js方法
2017/12/01 Javascript
微信小程序textarea层级过高(盖住其他元素)问题的解决办法
2019/03/04 Javascript
JavaScript实现单英文金山打字通
2020/07/24 Javascript
python logging日志模块原理及操作解析
2019/10/12 Python
python基于property()函数定义属性
2020/01/22 Python
Tensorflow训练模型越来越慢的2种解决方案
2020/02/07 Python
python 判断一组数据是否符合正态分布
2020/09/23 Python
Django怎么在admin后台注册数据库表
2020/11/14 Python
秘鲁购物网站:Linio秘鲁
2017/04/07 全球购物
TCP/IP模型的分界线
2012/12/01 面试题
挂职思想汇报
2013/12/31 职场文书
幼师自我鉴定
2014/02/01 职场文书
六一儿童节主持词
2014/03/21 职场文书
小摄影师教学反思
2014/04/27 职场文书
本科毕业生自荐信
2014/06/02 职场文书
文明社区申报材料
2014/08/21 职场文书
无房证明范本
2014/09/17 职场文书
民族学专业大学生职业规划范文:清晰未来的构想
2014/09/20 职场文书
2014年纪检工作总结
2014/11/12 职场文书
使用Ajax实现进度条的绘制
2022/04/07 Javascript