浅谈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入门的学习方法
Jan 02 PHP
php初学者写及时补给skype用户充话费的小程序
Nov 02 PHP
深入php常用函数的使用汇总
Jun 08 PHP
一个PHP针对数字的加密解密类
Mar 20 PHP
ThinkPHP的截取字符串函数无法显示省略号的解决方法
Jun 25 PHP
php中Session的生成机制、回收机制和存储机制探究
Aug 19 PHP
PHP程序中使用adodb连接不同数据库的代码实例
Dec 19 PHP
php使用ftp实现文件上传与下载功能
Jul 21 PHP
laravel5.4生成验证码的实例讲解
Aug 05 PHP
PHP文件操作实例总结【文件上传、下载、分页】
Dec 08 PHP
浅谈PHP封装CURL
Mar 06 PHP
PHP创建XML的方法示例【基于DOMDocument类及SimpleXMLElement类】
Sep 10 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
如何设置mysql允许外网访问
2013/06/04 PHP
使用php计算排列组合的方法
2013/11/13 PHP
thinkPHP数据库增删改查操作方法实例详解
2016/12/06 PHP
thinkPHP多表查询及分页功能实现方法示例
2017/07/03 PHP
PHP实践教程之过滤、验证、转义与密码详解
2017/07/24 PHP
PHP join()函数用法与实例讲解
2019/03/11 PHP
javascript 节点遍历函数
2010/03/28 Javascript
兼容IE与firefox火狐的回车事件(js与jquery)
2010/10/20 Javascript
jquery Deferred 快速解决异步回调的问题
2016/04/05 Javascript
bootstrap datetimepicker2.3.11时间插件使用
2016/11/19 Javascript
Nodejs 搭建简单的Web服务器详解及实例
2016/11/30 NodeJs
鼠标点击input,显示瞬间的边框颜色,对之修改与隐藏实例
2016/12/26 Javascript
JS实现复制内容到剪贴板功能
2017/02/05 Javascript
JavaScript的继承实现小结
2017/05/07 Javascript
JS开发 富文本编辑器TinyMCE详解
2019/07/19 Javascript
vscode中eslint插件的配置(prettier配置无效)
2019/09/10 Javascript
file-loader打包图片文件时路径错误输出为[object-module]的解决方法
2020/01/03 Javascript
基于Vue实现微前端的示例代码
2020/04/24 Javascript
解决vue使用vant轮播组件swipe + flex时文字抖动问题
2021/01/07 Vue.js
Python的内存泄漏及gc模块的使用分析
2014/07/16 Python
详解Python中的文本处理
2015/04/11 Python
以一个投票程序的实例来讲解Python的Django框架使用
2016/02/18 Python
python3中dict(字典)的使用方法示例
2017/03/22 Python
用 Python 连接 MySQL 的几种方式详解
2018/04/04 Python
详解Django中六个常用的自定义装饰器
2018/07/04 Python
Python实现最大子序和的方法示例
2019/07/05 Python
Python数据处理篇之Sympy系列(五)---解方程
2019/10/12 Python
Python使用selenium + headless chrome获取网页内容的方法示例
2019/10/16 Python
Python实现微信好友的数据分析
2019/12/16 Python
Python如何把多个PDF文件合并代码实例
2020/02/13 Python
Booking.com缤客中国:全球酒店在线预订网站
2020/05/03 全球购物
优秀团员个人的自我评价
2013/10/02 职场文书
《长相思》听课反思
2014/04/10 职场文书
街道务虚会发言材料
2014/10/20 职场文书
导游词之峨眉乐山/兵马俑/北京故宫御花园
2019/09/03 职场文书
baselines示例程序train_cartpole.py的ImportError
2022/05/20 Python