浅谈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 相关文章推荐
DISCUZ 分页代码
Jan 02 PHP
PHP 中文乱码解决办法总结分析
Jul 30 PHP
PHP 缓存实现代码及详细注释
May 16 PHP
php生成随机密码自定义函数代码(简单快速)
May 10 PHP
PHP curl CURLOPT_RETURNTRANSFER参数的作用使用实例
Feb 07 PHP
PHP远程调试之XDEBUG
Dec 29 PHP
php 流程控制switch的简单实例
Jun 07 PHP
使用php完成常见的文件上传功能(推荐)
Jan 13 PHP
PHP正则匹配操作简单示例【preg_match_all应用】
Jul 10 PHP
PHP面向对象类型约束用法分析
Jun 12 PHP
基于PHP实现微信小程序客服消息功能
Aug 12 PHP
使用laravel和ajax实现整个页面无刷新的操作方法
Oct 03 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制作新闻系统的思路
2006/10/09 PHP
PHP5 面向对象(学习记录)
2009/12/02 PHP
Laravel 5框架学习之子视图和表单复用
2015/04/09 PHP
php自定义函数实现二维数组排序功能
2016/07/20 PHP
thinkphp5.0自定义验证规则使用方法
2017/11/16 PHP
javascript 在网页中的运用(asp.net)
2009/11/23 Javascript
window.event快达到全浏览器支持了,以后使用就方便了
2011/11/30 Javascript
document.getElementById获取控件对象为空的解决方法
2013/11/20 Javascript
用C/C++来实现 Node.js 的模块(二)
2014/09/24 Javascript
推荐4个原生javascript常用的函数
2015/01/12 Javascript
Bootstrap每天必学之折叠
2016/04/12 Javascript
Canvas实现放射线动画效果
2017/02/15 Javascript
基于jQuery实现瀑布流页面
2017/04/11 jQuery
jquery实现图片轮播器
2017/05/23 jQuery
浅谈Vue SPA 首屏加载优化实践
2017/12/15 Javascript
vue.js-div滚动条隐藏但有滚动效果的实现方法
2018/03/03 Javascript
jQuery实现鼠标滑过商品小图片上显示对应大图片功能【测试可用】
2018/04/27 jQuery
vue中动态添加class类名的方法
2018/09/05 Javascript
layDate日期控件使用方法详解
2018/11/15 Javascript
JavaScript 实现轮播图特效的示例
2020/11/05 Javascript
[52:15]2014 DOTA2国际邀请赛中国区预选赛5.21 HGT VS LGD-GAMING
2014/05/23 DOTA
[02:41]DOTA2亚洲邀请赛小组赛第三日 赛事回顾
2015/02/01 DOTA
Python操作MySQL简单实现方法
2015/01/26 Python
PyQt5 QSerialPort子线程操作的实现
2018/04/21 Python
python pandas消除空值和空格以及 Nan数据替换方法
2018/10/30 Python
Django框架中间件定义与使用方法案例分析
2019/11/28 Python
Python使用Opencv实现边缘检测以及轮廓检测的实现
2020/12/31 Python
eBay英国购物网站:eBay.co.uk
2019/06/19 全球购物
SheIn沙特阿拉伯:女装在线
2020/03/23 全球购物
初中化学教学反思
2014/01/23 职场文书
公司应聘求职信
2014/06/21 职场文书
技术经济专业求职信
2014/09/03 职场文书
大学生见习报告总结
2014/11/04 职场文书
《棉鞋里的阳光》教学反思
2016/02/20 职场文书
2016年村党支部公开承诺书
2016/03/24 职场文书
前端JS获取URL参数的4种方法总结
2022/04/05 Javascript