浅谈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 相关文章推荐
phpMyAdmin下载、安装和使用入门教程
May 31 PHP
PHP5 面向对象程序设计
Feb 13 PHP
匹配csdn用户数据库与官方用户的重合度并将重叠部分的用户筛选出来
Dec 25 PHP
PHP中$_FILES的使用方法及注意事项说明
Feb 14 PHP
php汉字转拼音的示例
Feb 27 PHP
PHP文件上传判断file是否己选择上传文件的方法
Nov 10 PHP
PHP简单预防sql注入的方法
Sep 27 PHP
解决出现SoapFault (looks like we got no XML document)的问题
Jun 24 PHP
PHPMailer使用QQ邮箱实现邮件发送功能
Aug 18 PHP
Laravel框架实现的rbac权限管理操作示例
Jan 16 PHP
PHP过滤器 filter_has_var() 函数用法实例分析
Apr 23 PHP
深入浅析安装PhpStorm并激活的步骤详解
Sep 17 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
某大型网络公司应聘时的笔试题目附答案
2008/03/27 PHP
php生成数组的使用示例 php全组合算法
2014/01/16 PHP
浅析php工厂模式
2014/11/25 PHP
php正则表达式学习笔记
2015/11/13 PHP
PHP strripos函数用法总结
2019/02/11 PHP
JavaScript 基于原型的对象(创建、调用)
2009/10/16 Javascript
window.opener用法和用途实例介绍
2013/08/19 Javascript
href下载文件根据id取url并下载
2014/05/28 Javascript
从JQuery源码分析JavaScript函数的apply方法与call方法
2014/09/25 Javascript
Node.js环境下编写爬虫爬取维基百科内容的实例分享
2016/06/12 Javascript
js选择器全面解析
2016/06/27 Javascript
vue 使用eventBus实现同级组件的通讯
2018/03/02 Javascript
vue iview组件表格 render函数的使用方法详解
2018/03/15 Javascript
Angular学习教程之RouterLink花式跳转
2018/05/03 Javascript
npm配置国内镜像资源+淘宝镜像的方法
2018/09/07 Javascript
vue实现日历备忘录功能
2020/09/24 Javascript
在layui中layer弹出层点击事件无效的解决方法
2019/09/05 Javascript
JS Thunk 函数的含义和用法实例总结
2020/04/08 Javascript
[34:56]Ti4冒泡赛LGD vs Liquid 1
2014/07/14 DOTA
python聊天程序实例代码分享
2013/11/18 Python
Python实现包含min函数的栈
2016/04/29 Python
python测试mysql写入性能完整实例
2018/01/18 Python
python实现将汉字保存成文本的方法
2018/11/16 Python
python实现在内存中读写str和二进制数据代码
2020/04/24 Python
Django admin管理工具TabularInline类用法详解
2020/05/14 Python
华为旗下电子商务平台:华为商城
2016/08/06 全球购物
顶级宝石首饰网络零售商:Angara
2016/10/25 全球购物
孤独星球出版物:Lonely Planet Publications
2018/03/17 全球购物
美国浴缸、水槽和水龙头购物网站:Vintage Tub & Bath
2019/11/05 全球购物
澳大利亚领先的亚麻品牌:Bed Threads
2019/12/16 全球购物
万豪国际住宅与别墅集团:Homes & Villas by Marriott International
2020/10/08 全球购物
中学生获奖感言
2014/02/04 职场文书
网页美工求职信范文
2014/04/17 职场文书
信用卡结清证明怎么写
2014/09/13 职场文书
小学班长竞选稿
2015/11/20 职场文书
2016创先争优活动党员公开承诺书
2016/03/24 职场文书