浅谈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 相关文章推荐
分页显示Oracle数据库记录的类之二
Oct 09 PHP
如何过滤高亮显示非法字符
Oct 09 PHP
dede3.1分页文字采集过滤规则详说(图文教程)
Apr 03 PHP
php文件上传的例子及参数详解
Dec 12 PHP
php中注册器模式类用法实例分析
Nov 03 PHP
Laravel实现构造函数自动依赖注入的方法
Mar 16 PHP
PHP递归获取目录内所有文件的实现方法
Nov 01 PHP
php微信公众平台开发(一) 配置接口
Dec 06 PHP
PHP实现数据库统计时间戳按天分组输出数据的方法
Oct 10 PHP
PHP代码重构方法漫谈
Apr 17 PHP
PHP+百度AI OCR文字识别实现了图片的文字识别功能
May 08 PHP
浅析PHP中的 inet_pton 网络函数
Dec 16 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 adodb介绍
2009/03/19 PHP
thinkphp微信开之安全模式消息加密解密不成功的解决办法
2015/12/02 PHP
PHP图像裁剪缩略裁切类源码及使用方法
2016/01/07 PHP
php简单生成一组与多组随机字符串的方法
2017/05/09 PHP
php通过pecl方式安装扩展的实例讲解
2018/02/02 PHP
学习ExtJS Panel常用方法
2009/10/07 Javascript
一款js和css代码压缩工具[附JAVA环境配置方法]
2010/04/16 Javascript
jQuery+JSON+jPlayer实现QQ空间音乐查询功能示例
2013/06/17 Javascript
JS如何判断移动端访问设备并解析对应CSS
2013/11/27 Javascript
js闭包实现按秒计数
2015/04/23 Javascript
JavaScript学习笔记之数组去重
2016/03/23 Javascript
Bootstrap打造一个左侧折叠菜单的系统模板(二)
2016/05/17 Javascript
AngularJs基本特性解析(一)
2016/07/21 Javascript
json与jsonp知识小结(推荐)
2016/08/16 Javascript
JS获取本周周一,周末及获取任意时间的周一周末功能示例
2017/02/09 Javascript
微信小程序通过保存图片分享到朋友圈功能
2018/05/24 Javascript
使用webpack3.0配置webpack-dev-server教程
2018/05/29 Javascript
详解处理bootstrap4不支持远程静态框问题
2018/07/20 Javascript
React router动态加载组件之适配器模式的应用详解
2018/09/12 Javascript
小程序实现横向滑动日历效果
2019/10/21 Javascript
python监控网站运行异常并发送邮件的方法
2015/03/13 Python
Python 实现随机数详解及实例代码
2017/04/15 Python
python生成圆形图片的方法
2020/03/25 Python
python删除字符串中指定字符的方法
2018/08/13 Python
python 通过类中一个方法获取另一个方法变量的实例
2019/01/22 Python
python游戏开发之视频转彩色字符动画
2019/04/26 Python
Python获取数据库数据并保存在excel表格中的方法
2019/06/12 Python
基于Django框架的权限组件rbac实例讲解
2019/08/31 Python
python实现从尾到头打印单链表操作示例
2020/02/22 Python
python不同版本的_new_不同点总结
2020/12/09 Python
一款利用纯css3实现的win8加载动画的实例分析
2014/12/11 HTML / CSS
副厂长岗位职责
2014/02/02 职场文书
社区班子对照检查材料
2014/08/27 职场文书
2016婚礼主持词开场白
2015/11/24 职场文书
2019年手机市场的调研报告2篇
2019/10/10 职场文书
话题作文之自信作文
2019/11/15 职场文书