浅谈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 正则学习实例
Jul 30 PHP
Windows下利用Gvim写PHP产生中文乱码问题解决方法
Apr 20 PHP
使用PHP实现密保卡功能实现代码&amp;lt;打包下载直接运行&amp;gt;
Oct 09 PHP
APACHE的AcceptPathInfo指令使用介绍
Jan 18 PHP
PHP设计模式之解释器模式的深入解析
Jun 13 PHP
php中并发读写文件冲突的解决方案
Oct 25 PHP
thinkPHP下的widget扩展用法实例分析
Dec 26 PHP
phpstudy默认不支持64位php的解决方法
Feb 20 PHP
PHP 访问数据库配置通用方法(json)
May 20 PHP
PHP实现普通hash分布式算法简单示例
Aug 06 PHP
PHP依赖注入原理与用法分析
Aug 21 PHP
PHP chr()函数讲解
Feb 11 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/11/18 PHP
php实现带读写分离功能的MySQL类完整实例
2016/07/28 PHP
php组合排序简单实现方法
2016/10/15 PHP
PHP PDOStatement::columnCount讲解
2019/01/30 PHP
Laravel框架自定义验证过程实例分析
2019/02/01 PHP
用jscript启动sqlserver
2007/06/21 Javascript
jquery一般方法介绍 入门参考
2011/06/21 Javascript
js改变img标签的src属性在IE下没反应的解决方法
2013/07/23 Javascript
js控制浏览器全屏示例代码
2014/02/20 Javascript
javascript + jquery实现定时修改文章标题
2014/03/19 Javascript
webapp框架AngularUI的demo改造之路
2014/12/21 Javascript
深入分析jsonp协议原理
2015/09/26 Javascript
图解Sublime Text3使用技巧
2015/12/21 Javascript
原生JavaScript制作微博发布面板效果
2016/03/11 Javascript
JavaScript中0和&quot;&quot;比较引发的问题
2016/05/26 Javascript
谈谈jQuery之Deferred源码剖析
2016/12/19 Javascript
JQuery查找子元素find()和遍历集合each的方法总结
2017/03/07 Javascript
Vue中如何实现轮播图的示例代码
2017/07/27 Javascript
vue移动端路由切换实例分析
2018/05/14 Javascript
vue.js打包之后可能会遇到的坑!
2018/06/03 Javascript
JavaScript设计模式之模板方法模式原理与用法示例
2018/08/07 Javascript
Nuxt.js实现校验访问浏览器类型的中间件
2018/08/24 Javascript
layui 上传插件 带预览 非自动上传功能的实例(非常实用)
2019/09/23 Javascript
js实现上传按钮并显示缩略图小轮子
2020/05/04 Javascript
vue3+typescript实现图片懒加载插件
2020/10/26 Javascript
[20:46]Ti4循环赛第三日VG vs DK
2014/07/12 DOTA
DJANGO-URL反向解析REVERSE实例讲解
2019/10/25 Python
Python爬虫之Selenium实现关闭浏览器
2020/12/04 Python
Python爬虫回测股票的实例讲解
2021/01/22 Python
军训自我鉴定范文
2014/02/13 职场文书
车间机修工岗位职责
2014/02/28 职场文书
2015年元旦活动总结
2014/05/09 职场文书
领导班子作风建设年个人整改措施
2014/09/29 职场文书
大学生见习报告总结
2014/11/04 职场文书
优秀班组申报材料
2014/12/25 职场文书
作文评语怎么写
2014/12/25 职场文书