浅谈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 相关文章推荐
自己动手做一个SQL解释器
Oct 09 PHP
php网站来路获取代码(针对搜索引擎)
Jun 08 PHP
php安全开发 添加随机字符串验证,防止伪造跨站请求
Feb 14 PHP
PHP和.net中des加解密的实现方法
Feb 27 PHP
基于php-fpm的配置详解
Jun 03 PHP
ThinkPHP模板中数组循环实例
Oct 30 PHP
php类中的各种拦截器用法分析
Nov 03 PHP
在Laravel框架里实现发送邮件实例(邮箱验证)
May 20 PHP
PHP MySql增删改查的简单实例
Jun 21 PHP
解析PHP之提取多维数组指定列的方法
Jan 03 PHP
php使用Jpgraph创建3D饼形图效果示例
Feb 15 PHP
CI(CodeIgniter)框架视图中加载视图的方法
Mar 24 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 strtotime函数详解
2009/12/18 PHP
php的instanceof和判断闭包Closure操作示例
2020/01/26 PHP
JSP跨iframe如何传递参数实现代码
2013/09/21 Javascript
屏蔽script注入小例子
2013/11/12 Javascript
js与jquery获取父级元素,子级元素,兄弟元素的实现方法
2014/01/09 Javascript
使用node.js 制作网站前台后台
2014/11/13 Javascript
javascript结合fileReader 实现上传图片
2015/01/30 Javascript
jQuery实现仿路边灯箱广告图片轮播效果
2015/04/15 Javascript
Jquery实现瀑布流布局(备有详细注释)
2015/07/31 Javascript
提高jQuery性能优化的技巧
2015/08/03 Javascript
字符串反转_JavaScript
2016/04/28 Javascript
浅谈regExp的test方法取得的值变化的原因及处理方法
2017/03/01 Javascript
ES6中module模块化开发实例浅析
2017/04/06 Javascript
javascript实现循环广告条效果
2017/12/12 Javascript
Vue.set()实现数据动态响应的方法
2018/02/07 Javascript
JS中的算法与数据结构之链表(Linked-list)实例详解
2019/08/20 Javascript
layui自定义工具栏的方法
2019/09/19 Javascript
vue2.0 获取从http接口中获取数据,组件开发,路由配置方式
2019/11/04 Javascript
微信小程序商品详情页底部弹出框
2019/11/22 Javascript
小程序自定义模板实现吸顶功能
2020/01/08 Javascript
浅析TypeScript 命名空间
2020/03/19 Javascript
浅谈javascript如何获取文件后缀名
2020/08/07 Javascript
Python GAE、Django导出Excel的方法
2008/11/24 Python
python使用xmlrpc实例讲解
2013/12/17 Python
python模拟enum枚举类型的方法小结
2015/04/30 Python
Python3 加密(hashlib和hmac)模块的实现
2017/11/23 Python
python3.4.3下逐行读入txt文本并去重的方法
2018/04/29 Python
python中pika模块问题的深入探究
2018/10/13 Python
Python面向对象思想与应用入门教程【类与对象】
2019/04/12 Python
利用python计算windows全盘文件md5值的脚本
2019/07/27 Python
Python利用matplotlib绘制折线图的新手教程
2020/11/05 Python
土耳其时尚购物网站:Morhipo
2017/09/04 全球购物
几个Linux面试题笔试题
2012/12/01 面试题
春节联欢会主持词
2014/03/24 职场文书
大学生操行评语大全
2014/12/31 职场文书
Linux服务器离线安装 nginx的详细步骤
2022/06/16 Servers