浅谈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 面向对象详解
Sep 13 PHP
PHP命名空间(Namespace)的使用详解
May 04 PHP
用php实现选择排序的解决方法
May 04 PHP
解析在PHP中使用mysqli扩展库对mysql的操作
Jul 03 PHP
php上传大文件失败的原因及应对策略
Oct 20 PHP
实例讲解YII2中多表关联的使用方法
Jul 21 PHP
php正确输出json数据的实例讲解
Aug 21 PHP
Laravel学习笔记之Artisan命令生成自定义模板的方法
Nov 22 PHP
微信推送功能实现方式图文详解
Jul 12 PHP
如何在Laravel5.8中正确地应用Repository设计模式
Nov 26 PHP
PHP pthreads v3下同步处理synchronized用法示例
Feb 21 PHP
使用Entrust扩展包在laravel 中实现RBAC的功能
Mar 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 SMS短信服务验证码发送方法
2017/07/11 PHP
PHP使用SMTP邮件服务器发送邮件示例
2018/08/28 PHP
thinkPHP5框架接口写法简单示例
2019/08/05 PHP
javascript模仿msgbox提示效果代码
2008/06/10 Javascript
js限制textarea每行输入字符串长度的代码
2012/10/31 Javascript
JS实现一键回顶功能示例代码
2013/10/28 Javascript
js统计录入文本框中字符的个数并加以限制不超过多少
2014/05/23 Javascript
jQuery实现购物车数字加减效果
2015/03/14 Javascript
JavaScript列表框listbox全选和反选的实现方法
2015/03/18 Javascript
nodejs中实现sleep功能实例
2015/03/24 NodeJs
使用jQuery制作遮罩层弹出效果的极简实例分享
2016/05/12 Javascript
详解Angualr 组件间通信
2017/01/21 Javascript
修改 bootstrap table 默认detailRow样式的实例代码
2017/07/21 Javascript
详解使用angular的HttpClient搭配rxjs
2017/09/01 Javascript
Vue.js 2.5新特性介绍(推荐)
2017/10/24 Javascript
jQuery除指定区域外点击任何地方隐藏DIV功能
2017/11/13 jQuery
[00:36]DOTA2上海特级锦标赛 Alliance战队宣传片
2016/03/04 DOTA
使用Python脚本生成随机IP的简单方法
2015/07/30 Python
Django 实现购物车功能的示例代码
2018/10/08 Python
python函数修饰符@的使用方法解析
2019/09/02 Python
python集合的创建、添加及删除操作示例
2019/10/08 Python
pyhton中__pycache__文件夹的产生与作用详解
2019/11/24 Python
使用Keras中的ImageDataGenerator进行批次读图方式
2020/06/17 Python
pycharm激活码免费分享适用最新pycharm2020.2.3永久激活
2020/11/25 Python
python实现银行账户系统
2021/02/22 Python
css3闪亮进度条效果实现思路及代码
2013/04/17 HTML / CSS
详解通过HTML5 Canvas实现图片的平移及旋转变化的方法
2016/03/22 HTML / CSS
配置H5的滚动条样式的示例代码
2018/03/09 HTML / CSS
美国生日蛋糕店:Bake Me A Wish!
2017/02/08 全球购物
副主任竞聘演讲稿
2014/08/18 职场文书
毕业生就业推荐表自我评价
2015/03/02 职场文书
自我检讨书怎么写
2015/05/07 职场文书
2016关于学习党章的心得体会
2016/01/15 职场文书
《狼牙山五壮士》教学反思
2016/02/17 职场文书
解析探秘fescar分布式事务实现原理
2022/02/28 Java/Android
Consul在linux环境的集群部署
2022/04/08 Servers