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 相关文章推荐
不错的PHP学习之php4与php5之间会穿梭一点点感悟
May 03 PHP
PHP中的strtr函数使用介绍(str_replace)
Oct 20 PHP
php文件怎么打开 如何执行php文件
Dec 21 PHP
CodeIgniter上传图片成功的全部过程分享
Aug 12 PHP
一个严格的PHP Session会话超时时间设置方法
Jun 10 PHP
Thinkphp模板标签if和eq的区别和比较实例分析
Jul 01 PHP
PHP实现根据时间戳获取周几的方法
Feb 26 PHP
php封装的smartyBC类完整实例
Oct 19 PHP
深入理解PHP的远程多会话调试
Sep 21 PHP
PHP调用其他文件中的类
Apr 02 PHP
ThinkPHP框架使用redirect实现页面重定向的方法实例分析
Apr 12 PHP
PHP基于面向对象封装的分页类示例
Mar 15 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
php imagecreatetruecolor 创建高清和透明图片代码小结
2010/05/15 PHP
php计算到指定日期还有多少天的方法
2015/04/14 PHP
PHP手机号中间四位用星号*代替显示的实例
2017/06/02 PHP
thinkPHP5框架auth权限控制类与用法示例
2018/06/12 PHP
php更新cookie内容的详细方法
2019/09/30 PHP
jQuery 获取对象 根据属性、内容匹配, 还有表单元素匹配
2010/05/31 Javascript
jQuery源码分析之Event事件分析
2010/06/07 Javascript
获得所有表单值的JQuery实现代码[IE暂不支持]
2012/05/24 Javascript
在jQuery ajax中按钮button和submit的区别分析
2012/10/07 Javascript
标题过长使用javascript按字节截取字符串
2014/04/24 Javascript
JavaScript返回当前会话cookie全部键值对照的方法
2015/04/03 Javascript
node.js下LDAP查询实例分享
2015/09/30 Javascript
js实现倒计时关键代码
2017/05/05 Javascript
详解vue中使用express+fetch获取本地json文件
2017/10/10 Javascript
对angular 监控数据模型变化的事件方法$watch详解
2018/10/09 Javascript
vue+openlayers绘制省市边界线
2020/12/24 Vue.js
Python计算三角函数之asin()方法的使用
2015/05/15 Python
Python实现以时间换空间的缓存替换算法
2016/02/19 Python
python3操作mysql数据库的方法
2017/06/23 Python
利用Python检测URL状态
2019/07/31 Python
python使用python-pptx删除ppt某页实例
2020/02/14 Python
python实现坦克大战
2020/04/24 Python
HTML5 实战PHP之Web页面表单设计
2011/10/09 HTML / CSS
美国猫狗药物和用品网站:PetCareRx
2017/01/05 全球购物
澳洲国民品牌乡村路折扣店:Country Road & Trenery Outlet
2018/04/19 全球购物
Stuarts London美国/加拿大:世界领先的独立男装零售商之一
2019/03/18 全球购物
ASICS印度官方网站:日本专业运动品牌
2020/06/20 全球购物
Java面试题:Java类的Main方法如果是Private将会怎么样
2016/08/18 面试题
5个HTML5的常用本地存储方式详解与介绍
2021/03/27 HTML / CSS
高二生物教学反思
2014/01/27 职场文书
个人授权委托书样本
2014/09/13 职场文书
大雁塔英文导游词
2015/02/10 职场文书
同学毕业留言寄语
2015/02/27 职场文书
特此通知格式
2015/04/27 职场文书
小学同学聚会感言
2015/07/30 职场文书
Python办公自动化PPT批量转换操作
2021/09/15 Python