浅谈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的分页功能
Mar 21 PHP
PHP 页面编码声明方法详解(header或meta)
Mar 12 PHP
PHP中static关键字以及与self关键字的区别
Jul 01 PHP
PHP实现清除wordpress里恶意代码
Oct 21 PHP
PHP5.2中PDO的简单使用方法
Mar 25 PHP
php ajax异步读取rss文档数据
Mar 29 PHP
PHP自定义函数实现格式化秒的方法
Sep 14 PHP
PHP页面输出时js设置input框的选中值
Sep 30 PHP
PHP CodeIgniter分页实例及多条件查询解决方案(推荐)
May 20 PHP
Yii框架的路由配置方法分析
Sep 09 PHP
Yii框架安装简明教程
May 15 PHP
laravel数据库查询结果自动转数组修改实例
Feb 27 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
在线增减.htpasswd内的用户
2006/10/09 PHP
php的access操作类
2008/04/09 PHP
PHP表单验证的3个函数ISSET()、empty()、is_numeric()的使用方法
2011/08/22 PHP
浅析PHP 按位与或 (^ 、&amp;)
2013/06/21 PHP
使用新浪微博API的OAuth认证发布微博实例
2015/03/27 PHP
如何使用PHP Embed SAPI实现Opcodes查看器
2015/11/10 PHP
设定php简写功能的方法
2019/11/28 PHP
javascript网页关键字高亮代码
2008/07/30 Javascript
为Extjs加加速(javascript加速)
2010/08/19 Javascript
js 限制数字 js限制输入实现代码
2012/12/04 Javascript
window.event.keyCode兼容IE和Firefox实现js代码
2013/05/30 Javascript
jQuery插件的写法分享
2013/06/12 Javascript
简介JavaScript中的setHours()方法的使用
2015/06/11 Javascript
JS脚本根据手机浏览器类型跳转WAP手机网站(两种方式)
2015/08/04 Javascript
JS实现弹出浮动窗口(支持鼠标拖动和关闭)实例详解
2015/08/06 Javascript
JS实现先显示大图后自动收起显示小图的广告代码
2015/09/04 Javascript
Javascript 闭包详解及实例代码
2016/11/30 Javascript
jQuery插件HighCharts实现气泡图效果示例【附demo源码】
2017/03/13 Javascript
iscroll实现下拉刷新功能
2017/07/18 Javascript
angular6的响应式表单的实现
2018/10/10 Javascript
JS开发 富文本编辑器TinyMCE详解
2019/07/19 Javascript
Bootstrap实现模态框效果
2019/09/30 Javascript
JS中this的4种绑定规则详解
2020/02/04 Javascript
小程序开发之模态框组件封装
2020/04/23 Javascript
浅谈在vue-cli3项目中解决动态引入图片img404的问题
2020/08/04 Javascript
vue3自定义dialog、modal组件的方法
2021/01/04 Vue.js
Python上下文管理器和with块详解
2017/09/09 Python
python下10个简单实例代码
2017/11/15 Python
python开发准备工作之配置虚拟环境(非常重要)
2019/02/11 Python
python之拟合的实现
2019/07/19 Python
python KNN算法实现鸢尾花数据集分类
2019/10/24 Python
python中实现栈的三种方法
2020/12/19 Python
浅谈HTML5 &amp; CSS3的新交互特性
2016/07/19 HTML / CSS
中软Java笔试题
2012/11/11 面试题
民主生活会对照检查材料(统计局)
2014/09/21 职场文书
《狼牙山五壮士》教学反思
2016/02/17 职场文书