浅谈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程序员工具
May 26 PHP
php daodb插入、更新与删除数据
Mar 19 PHP
需要发散思维学习PHP
Jun 29 PHP
PHP 5.3.0 安装分析心得
Aug 07 PHP
PHP中计算字符串相似度的函数代码
Dec 29 PHP
linux环境apache多端口配置虚拟主机的方法深入介绍
Jun 09 PHP
php.ini修改php上传文件大小限制的方法详解
Jun 17 PHP
Session服务器配置指南与使用经验的深入解析
Jun 17 PHP
Yii框架在页面输出执行sql语句以方便调试的实现方法
Dec 24 PHP
phpStudy访问速度慢和启动失败的解决办法
Nov 19 PHP
php微信开发之批量生成带参数的二维码
Jun 26 PHP
PHP如何防止XSS攻击与XSS攻击原理的讲解
Mar 22 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
discuz安全提问算法
2007/06/06 PHP
php 高效率写法 推荐
2010/02/21 PHP
PHP中使用memcache存储session的三种配置方法
2014/04/05 PHP
PHP实现采集中国天气网未来7天天气
2014/10/15 PHP
PHP获取youku视频真实flv文件地址的方法
2014/12/23 PHP
PHP简单获取视频预览图的方法
2015/03/12 PHP
CentOS下搭建PHP环境与WordPress博客程序的全流程总结
2016/05/07 PHP
php 使用curl模拟登录人人(校内)网的简单实例
2016/06/06 PHP
详解PHP 二维数组排序保持键名不变
2019/03/06 PHP
DEFER怎么用?
2006/07/01 Javascript
让您的菜单不离网站
2006/10/03 Javascript
模拟用户操作Input元素,不会触发相应事件
2007/05/11 Javascript
js arguments,jcallee caller用法总结
2013/11/30 Javascript
js对字符的验证方法汇总
2015/02/04 Javascript
Jquery揭秘系列:ajax原生js实现详解(推荐)
2016/06/08 Javascript
详解支持Angular 2的表格控件
2017/01/19 Javascript
JS实现两周内自动登录功能
2017/03/23 Javascript
Underscore之Array_动力节点Java学院整理
2017/07/10 Javascript
基于Vue框架vux组件库实现上拉刷新功能
2017/11/28 Javascript
jquery实现侧边栏左右伸缩效果的示例
2017/12/19 jQuery
jQuery实现基本淡入淡出效果的方法详解
2018/09/05 jQuery
JS中通过url动态获取图片大小的方法小结(两种方法)
2018/10/31 Javascript
使用setup.py安装python包和卸载python包的方法
2013/11/27 Python
python中偏函数partial用法实例分析
2015/07/08 Python
Python 基础知识之字符串处理
2017/01/06 Python
pandas DataFrame索引行列的实现
2019/06/04 Python
canvas 下载二维码和图片加水印的方法
2018/03/21 HTML / CSS
中国一家专注拼团的社交购物网站:拼多多
2018/06/13 全球购物
美国在线面料商店:Online Fabric Store
2018/07/26 全球购物
限量版运动鞋和街头服饰:TheDrop
2020/09/06 全球购物
应届生妇产科护士求职信
2013/10/27 职场文书
副乡长群众路线教育实践活动个人对照检查材料
2014/09/19 职场文书
党的群众路线教育实践活动个人整改措施
2014/10/27 职场文书
教师自荐信范文
2015/03/06 职场文书
将Python代码打包成.exe可执行文件的完整步骤
2021/05/12 Python
JS class语法糖的深入剖析
2022/07/07 Javascript