PHP curl批处理及多请求并发实现方法分析


Posted in PHP onAugust 15, 2018

本文实例讲述了PHP curl批处理及多请求并发实现方法。分享给大家供大家参考,具体如下:

在面试过程中遇到一个问题,加入一个一个网站访问一次需要两秒,我们如何实现在2秒左右请求三次?

面试官想问的就是如何使用curl并发处理请求

关于curl_multi_init()

一般来说,想到要用curl_multi_init()时,目的是要同时请求多个url,而不是一个一个依次请求,否则就要curl_init()了。

不过,在使用curl_multi的时候,你可能遇到cpu消耗过高、网页假死等现象,可以看看《PHP使用curl_multi_select解决curl_multi网页假死问题》

使用curl_multi的步骤总结如下:

  • 第一步:调用curl_multi_init
  • 第二步:循环调用curl_multi_add_handle

    这一步需要注意的是,curl_multi_add_handle的第二个参数是由curl_init而来的子handle。

  • 第三步:持续调用curl_multi_exec
  • 第四步:根据需要循环调用curl_multi_getcontent获取结果
  • 第五步:调用curl_multi_remove_handle,并为每个字handle调用curl_close
  • 第六步:调用curl_multi_close

各函数作用解释:

curl_multi_init()
初始化一个curl批处理句柄资源。

curl_multi_add_handle()
向curl批处理会话中添加单独的curl句柄资源。curl_multi_add_handle()函数有两个参数,第一个参数表示一个curl批处理句柄资源,第二个参数表示一个单独的curl句柄资源。

curl_multi_exec()
解析一个curl批处理句柄,curl_multi_exec()函数有两个参数,第一个参数表示一个批处理句柄资源,第二个参数是一个引用值的参数,表示剩余需要处理的单个的curl句柄资源数量。

curl_multi_remove_handle()
移除curl批处理句柄资源中的某个句柄资源,curl_multi_remove_handle()函数有两个参数,第一个参数表示一个curl批处理句柄资源,第二个参数表示一个单独的curl句柄资源。

curl_multi_close()
关闭一个批处理句柄资源。

curl_multi_getcontent()
在设置了CURLOPT_RETURNTRANSFER的情况下,返回获取的输出的文本流。

curl_multi_info_read()
获取当前解析的curl的相关传输信息。

示例代码:

<?php
// 创建一对cURL资源
$ch1 = curl_init();
$ch2 = curl_init();
// 设置URL和相应的选项
curl_setopt($ch1, CURLOPT_URL, "http://www.example.com/");
curl_setopt($ch1, CURLOPT_HEADER, 0);
curl_setopt($ch2, CURLOPT_URL, "http://www.php.net/");
curl_setopt($ch2, CURLOPT_HEADER, 0);
// 创建批处理cURL句柄
$mh = curl_multi_init();
// 增加2个句柄
curl_multi_add_handle($mh,$ch1);
curl_multi_add_handle($mh,$ch2);
$running=null;
// 执行批处理句柄
do {
  usleep(10000);
  curl_multi_exec($mh,$running);
} while ($running > 0);
// 关闭全部句柄
curl_multi_remove_handle($mh, $ch1);
curl_multi_remove_handle($mh, $ch2);
curl_multi_close($mh);
?>

获取批处理后的结果:

PHP curl批处理及多请求并发实现方法分析

string curl_multi_getcontent ( resource $ch )

ch是由 curl_init() 返回的 cURL 句柄。

参考:

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
vBulletin Forum 2.3.xx SQL Injection
Oct 09 PHP
用PHP编程开发“虚拟域名”系统
Oct 09 PHP
收集的DedeCMS一些使用经验
Mar 17 PHP
yii框架中的Url生产问题小结
Jan 16 PHP
解析PHP跳出循环的方法以及continue、break、exit的区别介绍
Jul 01 PHP
Codeigniter实现多文件上传并创建多个缩略图
Jun 12 PHP
启用Csrf后POST数据时出现的400错误
Jul 05 PHP
PHP判断JSON对象是否存在的方法(推荐)
Jul 06 PHP
PHP实现链式操作的原理详解
Sep 16 PHP
php性能分析之php-fpm慢执行日志slow log用法浅析
Oct 17 PHP
PHP解析url并得到url参数方法总结
Oct 11 PHP
PHP7引入的&quot;??&quot;和&quot;?:&quot;的区别讲解
Apr 08 PHP
php使用curl_init()和curl_multi_init()多线程的速度比较详解
Aug 15 #PHP
php使用curl获取header检测开启GZip压缩的方法
Aug 15 #PHP
深入研究PHP中的preg_replace和代码执行
Aug 15 #PHP
PHP中一个有趣的preg_replace函数详解
Aug 15 #PHP
PHP使用curl_multi_select解决curl_multi网页假死问题的方法
Aug 15 #PHP
php+croppic.js实现剪切上传图片功能
Aug 14 #PHP
PHP设计模式之委托模式定义与用法简单示例
Aug 13 #PHP
You might like
可快速识别放射性物质-国外大神教你diy一个开放式辐射探测器
2020/03/12 无线电
php miniBB中文乱码问题解决方法
2008/11/25 PHP
PHP字符串中特殊符号的过滤方法介绍
2014/02/18 PHP
CentOS下PHP安装Oracle扩展
2015/02/15 PHP
Laravel框架使用Seeder实现自动填充数据功能
2018/06/13 PHP
Prototype Function对象 学习
2009/07/12 Javascript
JavaScript toFixed() 方法
2010/04/15 Javascript
JS+DIV+CSS实现的经典标签切换效果代码
2015/09/14 Javascript
JavaScript编写带旋转+线条干扰的验证码脚本实例
2016/05/30 Javascript
关于javascript中限定时间内防止按钮重复点击的思路详解
2016/08/16 Javascript
JavaScript 随机验证码的生成实例代码
2016/09/22 Javascript
Json对象和字符串互相转换json数据拼接和JSON使用方式详细介绍(小结)
2016/10/25 Javascript
Vue.js 和 MVVM 的注意事项
2016/11/07 Javascript
Nodejs使用Mongodb存储与提供后端CRD服务详解
2018/09/04 NodeJs
RxJS的入门指引和初步应用
2019/06/15 Javascript
vue-router重写push方法,解决相同路径跳转报错问题
2020/08/07 Javascript
js实现鼠标切换图片(无定时器)
2021/01/27 Javascript
[06:49]2018DOTA2国际邀请赛寻真——VirtusPro傲视群雄
2018/08/12 DOTA
python获取指定网页上所有超链接的方法
2015/04/04 Python
举例讲解Python设计模式编程中的访问者与观察者模式
2016/01/26 Python
Python增量循环删除MySQL表数据的方法
2016/09/23 Python
Python爬虫使用Selenium+PhantomJS抓取Ajax和动态HTML内容
2018/02/23 Python
Python批量发送post请求的实现代码
2018/05/05 Python
Python Numpy库安装与基本操作示例
2019/01/08 Python
在jupyter notebook中调用.ipynb文件方式
2020/04/14 Python
pyecharts动态轨迹图的实现示例
2020/04/17 Python
记录模型训练时loss值的变化情况
2020/06/16 Python
美国机场停车位预订:About Airport Parking
2018/03/26 全球购物
加拿大时装零售商:Influence U
2018/12/22 全球购物
爱情检讨书大全
2014/01/21 职场文书
音乐教育感言
2014/03/05 职场文书
婚前财产协议书范本
2014/10/19 职场文书
向女朋友道歉的话
2015/01/20 职场文书
高中生综合素质评价范文
2015/08/18 职场文书
创业计划书之蛋糕店
2019/08/29 职场文书
CDPR谈《巫师》新作用虚幻5原因 称不会为Epic独占
2022/04/06 其他游戏