浅谈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 jquery 实现新闻标签分类与无刷新分页
Dec 18 PHP
windows的文件系统机制引发的PHP路径爆破问题分析
Jul 28 PHP
smarty模板引擎中内建函数if、elseif和else的使用方法
Jan 22 PHP
启用Csrf后POST数据时出现的400错误
Jul 05 PHP
smarty中常用方法实例总结
Aug 07 PHP
Session 失效的原因汇总及解决丢失办法
Sep 30 PHP
详解PHP的Yii框架中日志的相关配置及使用
Dec 08 PHP
PHP 生成微信红包代码简单
Mar 25 PHP
CI操作cookie的方法分析(基于helper类库)
Mar 28 PHP
Linux环境下php实现给网站截图的方法
May 03 PHP
php 获取xml接口数据的处理方法
May 31 PHP
PHP从零开始打造自己的MVC框架之路由类实现方法分析
Jun 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中导出数据到excel时数字变为科学计数的解决方法
2013/02/03 PHP
php获取表单中多个同名input元素的值
2014/03/20 PHP
Yii2框架引用bootstrap中日期插件yii2-date-picker的方法
2016/01/09 PHP
php常用正则函数实例小结
2016/12/29 PHP
详解PHP中的 input属性(隐藏 只读 限制)
2017/08/14 PHP
javascript 词法作用域和闭包分析说明
2010/08/12 Javascript
Jquery跨域获得Json时invalid label错误的解决办法
2011/01/11 Javascript
解析offsetHeight,clientHeight,scrollHeight之间的区别
2013/11/20 Javascript
cookie中的path与domain属性详解
2013/12/18 Javascript
jQuery使用toggleClass方法动态添加删除Class样式的方法
2015/03/26 Javascript
PhantomJS快速入门教程(服务器端的 JavaScript API 的 WebKit)
2015/08/06 Javascript
jQuery无刷新切换主题皮肤实例讲解
2015/10/21 Javascript
学习javascript面向对象 实例讲解面向对象选项卡
2016/01/04 Javascript
javascript实现抽奖程序的简单实例
2016/06/07 Javascript
深入理解JavaScript中Ajax
2016/08/02 Javascript
微信小程序 实现tabs选项卡效果实例代码
2016/10/31 Javascript
详解nodeJS中读写文件方法的区别
2017/03/06 NodeJs
Three.js获取鼠标点击的三维坐标示例代码
2017/03/24 Javascript
通过原生vue添加滚动加载更多功能
2019/11/21 Javascript
Python按行读取文件的简单实现方法
2016/06/22 Python
Python使用Windows API创建窗口示例【基于win32gui模块】
2018/05/09 Python
python实现吃苹果小游戏
2020/03/21 Python
keras实现调用自己训练的模型,并去掉全连接层
2020/06/09 Python
Python爬虫小例子——爬取51job发布的工作职位
2020/07/10 Python
CSS3实现可爱的小黄人动画
2016/07/11 HTML / CSS
HTML5中的Scoped属性使用实例
2014/04/23 HTML / CSS
HTML5 Canvas实现图片缩放、翻转、颜色渐变的代码示例
2016/02/28 HTML / CSS
西班牙自行车和跑步商店:Alltricks
2018/07/07 全球购物
在职研究生自我鉴定
2013/10/16 职场文书
财务科科长岗位职责
2014/03/10 职场文书
国际贸易毕业生自荐书
2014/06/22 职场文书
校长师德表现自我评价
2015/03/05 职场文书
小学安全工作总结2015
2015/05/18 职场文书
公司管理建议书
2015/09/14 职场文书
浅析Python中的随机采样和概率分布
2021/12/06 Python
Python实现Excel文件的合并(以新冠疫情数据为例)
2022/03/20 Python