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计划任务、定时执行任务的实现代码
Apr 23 PHP
采用ThinkPHP中F方法实现快速缓存实例
Jun 13 PHP
Win2003+apache+PHP+SqlServer2008 配置生产环境
Jul 29 PHP
php实现设计模式中的单例模式详解
Oct 11 PHP
php实现发送微信模板消息的方法
Mar 07 PHP
在WordPress的后台中添加顶级菜单和子菜单的函数详解
Jan 11 PHP
PHP 返回13位时间戳的实现代码
May 13 PHP
php获取访问者浏览页面的浏览器类型
Jan 23 PHP
php表单处理操作
Nov 16 PHP
PHP封装curl的调用接口及常用函数详解
May 31 PHP
PDO::exec讲解
Jan 28 PHP
yii2.0框架实现上传excel文件后导入到数据库的方法示例
Apr 13 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编码规范之注释和文件结构说明
2010/07/09 PHP
php 缩略图实现函数代码
2011/06/23 PHP
php自定义函数call_user_func和call_user_func_array详解
2011/07/14 PHP
使用php将某个目录下面的所有文件罗列出来的方法详解
2013/06/21 PHP
PHP 导出Excel示例分享
2014/08/18 PHP
Yii框架分页实现方法详解
2017/05/20 PHP
laravel Task Scheduling(任务调度)在windows下的使用详解
2019/10/22 PHP
javascript Zifa FormValid 0.1表单验证 代码打包下载
2007/06/08 Javascript
javascript cookies 设置、读取、删除实例代码
2010/04/12 Javascript
基于Jquery的动态添加控件并取值的实现代码
2010/09/24 Javascript
jQuery.validate 常用方法及需要注意的问题
2013/03/20 Javascript
客户端js性能优化小技巧整理
2013/11/05 Javascript
js调用浏览器打印模块实现点击按钮触发自定义函数
2014/03/21 Javascript
使用JavaScript 实现的人脸检测
2015/03/24 Javascript
JavaScript分页功能的实现方法
2015/04/25 Javascript
JavaScript encodeURI 和encodeURIComponent
2015/12/04 Javascript
jquery实现图片平滑滚动详解
2017/03/22 jQuery
详解webpack进阶之loader篇
2017/08/23 Javascript
JavaScript前端开发时数值运算的小技巧
2020/07/28 Javascript
JavaScript经典案例之简易计算器
2020/08/24 Javascript
nestjs中异常过滤器Exceptionfilter的具体使用
2021/02/07 Javascript
[42:34]VP vs VG 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
Python和Perl绘制中国北京跑步地图的方法
2016/03/03 Python
Python如何为图片添加水印
2016/11/25 Python
django rest framework之请求与响应(详解)
2017/11/06 Python
python中join()方法介绍
2018/10/11 Python
vue.js刷新当前页面的实例讲解
2020/12/29 Python
Scholastic父母商店:儿童书籍
2017/01/01 全球购物
绿色美容,有机护肤品和化妆品:Safe & Chic
2018/10/29 全球购物
New Balance德国官方网站:购买鞋子和服装
2019/08/31 全球购物
年度考核自我鉴定
2014/02/02 职场文书
机械制造专业毕业生求职信
2014/03/02 职场文书
电子商务专业应届毕业生求职信
2014/06/21 职场文书
员工安全责任书范本
2014/07/24 职场文书
乡镇干部个人对照检查材料(群众路线)
2014/09/26 职场文书
师德自我剖析材料范文
2014/10/06 职场文书