浅谈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 相关文章推荐
Wordpress php 分页代码
Oct 21 PHP
php session安全问题分析
Jun 24 PHP
php中的常用魔术方法总结
Aug 02 PHP
PHP无限分类(树形类)
Sep 28 PHP
实用的简单PHP分页集合包括使用方法
Oct 21 PHP
一个严格的PHP Session会话超时时间设置方法
Jun 10 PHP
Thinkphp中的volist标签用法简介
Jun 18 PHP
php将文本文件转换csv输出的方法
Dec 31 PHP
PHP调试函数和日志记录函数分享
Jan 31 PHP
PHP使用ffmpeg给视频增加字幕显示的方法
Mar 12 PHP
php 无限级分类 获取顶级分类ID
Mar 13 PHP
PHP文件系统管理(实例讲解)
Sep 19 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自定义函数截取汉字长度
2014/05/15 PHP
使用PHP如何实现高效安全的ftp服务器(二)
2015/12/30 PHP
Zend Framework动作助手Url用法详解
2016/03/05 PHP
Laravel利用gulp如何构建前端资源详解
2018/06/03 PHP
php 读取文件夹下所有图片、文件的实例
2018/10/17 PHP
PHP标准库(PHP SPL)详解
2019/03/16 PHP
php设计模式之建造器模式分析【星际争霸游戏案例】
2020/01/23 PHP
基于ThinkPHP删除目录及目录文件函数
2020/10/28 PHP
javascript下操作css的float属性的特殊写法
2007/08/22 Javascript
用javascript实现画板的代码
2007/09/05 Javascript
jquery弹出框的用法示例(一)
2013/08/26 Javascript
JQuery异步加载无限下拉框级联功能实现示例
2014/02/19 Javascript
JS基于Ajax实现的网页Loading效果代码
2015/10/27 Javascript
JS面向对象编程详解
2016/03/06 Javascript
微信小程序实现图片预加载组件
2017/01/18 Javascript
使用Node搭建reactSSR服务端渲染架构
2018/08/30 Javascript
windows如何把已安装的nodejs高版本降级为低版本(图文教程)
2020/12/14 NodeJs
详解template标签用法(含vue中的用法总结)
2021/01/12 Vue.js
[56:17]NB vs Infamous 2019国际邀请赛淘汰赛 败者组 BO3 第三场 8.22
2019/09/05 DOTA
[01:05:52]DOTA2-DPC中国联赛 正赛 Ehome vs Aster BO3 第一场 2月2日
2021/03/11 DOTA
实例讲解Python中global语句下全局变量的值的修改
2016/06/16 Python
Python用模块pytz来转换时区
2016/08/19 Python
python实现稀疏矩阵示例代码
2017/06/09 Python
Python实现求笛卡尔乘积的方法
2017/09/16 Python
python下实现二叉堆以及堆排序的示例
2017/09/29 Python
python对矩阵进行转置的2种处理方法
2019/07/17 Python
毕业实习个人鉴定范文
2013/12/10 职场文书
十八大感想感言
2014/02/10 职场文书
个人简历自荐信
2014/06/26 职场文书
幼儿园大班开学寄语
2014/08/02 职场文书
2014年秋季开学典礼主持词
2014/08/02 职场文书
筑梦中国心得体会
2016/01/18 职场文书
如何理解PHP核心特性命名空间
2021/05/28 PHP
解析Java异步之call future
2021/06/14 Java/Android
Z-Order加速Hudi大规模数据集方案分析
2022/03/31 Servers
Spring Boot项目如何优雅实现Excel导入与导出功能
2022/06/10 Java/Android