浅谈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中一个控制字符串输出的函数
Oct 09 PHP
PHP通过COM使用ADODB的简单例子
Dec 31 PHP
phpinfo 系统查看参数函数代码
Jun 05 PHP
php设计模式 Builder(建造者模式)
Jun 26 PHP
PHP ? EasyUI DataGrid 资料取的方式介绍
Nov 07 PHP
解析php mysql 事务处理回滚操作(附实例)
Aug 05 PHP
discuz免激活同步登入代码修改方法(discuz同步登录)
Dec 24 PHP
实现获取http内容的php函数分享
Feb 16 PHP
php像数组一样存取和修改字符串字符
Mar 21 PHP
对laravel in 查询的使用方法详解
Oct 09 PHP
php实现商城购物车的思路和源码分析
Jul 23 PHP
PHP 实现base64编码文件上传出现问题详解
Sep 01 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的配置文件php.ini
2006/10/09 PHP
PHP学习笔记之一
2011/01/17 PHP
ThinkPHP表单自动提交验证实例教程
2014/07/18 PHP
destoon实现调用自增数字从1开始的方法
2014/08/21 PHP
Yii2使用swiftmailer发送邮件的方法
2016/05/03 PHP
php设计模式之观察者模式定义与用法经典示例
2019/09/19 PHP
JAVASCRIPT  THIS详解 面向对象
2009/03/25 Javascript
高性能WEB开发 flush让页面分块,逐步呈现 flush让页面分块,逐步呈现
2010/06/19 Javascript
JavaScript变量的作用域全解析
2015/08/14 Javascript
jQuery基于ajax()使用serialize()提交form数据的方法
2015/12/08 Javascript
快速掌握Node.js中setTimeout和setInterval的使用方法
2016/03/21 Javascript
AngularJS Bootstrap详细介绍及实例代码
2016/07/28 Javascript
原生js封装的一些jquery方法(详解)
2016/09/20 Javascript
validationEngine 表单验证插件使用实例代码
2017/06/15 Javascript
基于Vue的延迟加载插件vue-view-lazy
2018/05/21 Javascript
JS中验证整数和小数的正则表达式
2018/10/08 Javascript
使用webpack打包后的vue项目如何正确运行(express)
2018/10/26 Javascript
微信小程序dom操作的替代思路实例分析
2018/12/06 Javascript
原生JS forEach()和map()遍历的区别、兼容写法及jQuery $.each、$.map遍历操作
2019/02/27 jQuery
详解vue 路由跳转四种方式 (带参数)
2019/04/28 Javascript
开源一个微信小程序仪表盘组件过程解析
2019/07/30 Javascript
JSON 入门教程基础篇 json入门学习笔记
2020/09/22 Javascript
[02:47]DOTA2亚洲邀请赛 HR战队出场宣传片
2015/02/07 DOTA
[46:53]Secret vs Liquid 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
python将文本转换成图片输出的方法
2015/04/28 Python
Python基于DES算法加密解密实例
2015/06/03 Python
Python正则表达式教程之二:捕获篇
2017/03/02 Python
python爬取内容存入Excel实例
2019/02/20 Python
python实现接口并发测试脚本
2019/06/25 Python
通过python改变图片特定区域的颜色详解
2019/07/15 Python
Pytorch中膨胀卷积的用法详解
2020/01/07 Python
美国知名艺术画网站:Art.com
2017/02/09 全球购物
高清安全摄像头系统:Lorex Technology
2018/07/20 全球购物
绿色小区申报材料
2014/08/22 职场文书
安全教育主题班会总结
2015/08/14 职场文书
JavaScript的Set数据结构详解
2022/02/18 Javascript