浅谈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 文件缓存函数
Oct 08 PHP
PHP中设置一个严格30分钟过期Session面试题的4种答案
Jul 30 PHP
PHP代码判断设备是手机还是平板电脑(两种方法)
Oct 19 PHP
Zend Framework教程之路由功能Zend_Controller_Router详解
Mar 07 PHP
最新最全PHP生成制作验证码代码详解(推荐)
Jun 12 PHP
基于Swoole实现PHP与websocket聊天室
Aug 03 PHP
php制作基于xml的RSS订阅源功能示例
Feb 08 PHP
PHP实现的常规正则验证helper公共类完整实例
Apr 27 PHP
thinkphp分页集成实例
Jul 24 PHP
PHP7.1实现的AES与RSA加密操作示例
Jun 15 PHP
PHP远程连接oracle数据库操作实现方法图文详解
Apr 11 PHP
Laravel框架中缓存的使用方法分析
Sep 06 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积分兑换接口实例
2015/02/09 PHP
使用PHP接受文件并获得其后缀名的方法
2015/08/05 PHP
thinkPHP导出csv文件及用表格输出excel的方法
2015/12/30 PHP
PHP7内核CGI与FastCGI详解
2019/04/14 PHP
jQuery 开发者应该注意的9个错误
2012/05/03 Javascript
用javascript为页面添加天气显示实现思路及代码
2013/12/02 Javascript
Bootstrap Table服务器分页与在线编辑应用总结
2016/08/08 Javascript
JS 实现导航菜单中的二级下拉菜单的几种方式
2016/10/31 Javascript
浅析script标签中的defer与async属性
2016/11/30 Javascript
基于JavaScript中字符串的match与replace方法(详解)
2017/12/04 Javascript
vue项目中使用ueditor的实例讲解
2018/03/05 Javascript
详解vue服务端渲染浏览器端缓存(keep-alive)
2018/10/12 Javascript
基于vue实现滚动条滚动到指定位置对应位置数字进行tween特效
2019/04/18 Javascript
JavaScript函数式编程(Functional Programming)箭头函数(Arrow functions)用法分析
2019/05/22 Javascript
Python实现对excel文件列表值进行统计的方法
2015/07/25 Python
python 打印对象的所有属性值的方法
2016/09/11 Python
python遍历文件夹下所有excel文件
2018/01/03 Python
python 实现对文件夹内的文件排序编号
2018/04/12 Python
Python3+PyInstall+Sciter解决报错缺少dll、html等文件问题
2019/07/15 Python
Python 分发包中添加额外文件的方法
2019/08/16 Python
python计算无向图节点度的实例代码
2019/11/22 Python
Python 统计位数为偶数的数字代码详解
2020/03/15 Python
python正则表达式的懒惰匹配和贪婪匹配说明
2020/07/13 Python
python计算auc的方法
2020/09/09 Python
探索HTML5本地存储功能运用技巧
2016/03/02 HTML / CSS
美国南部最大的家族百货公司:Belk
2017/01/30 全球购物
TripAdvisor西班牙官方网站:全球领先的旅游网站
2018/01/10 全球购物
全球最大化妆品零售网站:SkinStore
2020/10/24 全球购物
幼儿园园长岗位职责
2013/11/26 职场文书
编辑找工作求职信分享
2014/01/03 职场文书
早餐连锁店计划书
2014/01/08 职场文书
领导干部培训感言
2014/01/23 职场文书
幼儿园大班毕业感言
2014/02/06 职场文书
师范类求职信
2014/06/21 职场文书
开服装店计划书
2014/08/15 职场文书
婚宴邀请函
2015/01/30 职场文书