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 相关文章推荐
让你的网站首页自动选择语言转跳
Dec 06 PHP
php设计模式 Strategy(策略模式)
Jun 26 PHP
解决Codeigniter不能上传rar和zip压缩包问题
Mar 07 PHP
thinkphp中ajax与php响应过程详解
Dec 08 PHP
PHP面向对象程序设计组合模式与装饰模式详解
Dec 02 PHP
详解PHP数据压缩、加解密(pack, unpack)
Dec 17 PHP
PHP中overload与override的区别
Feb 13 PHP
thinkPHP微信分享接口JSSDK用法实例
Jul 07 PHP
实例介绍PHP中zip_open()函数用法
Feb 15 PHP
php解决约瑟夫环算法实例分析
Sep 30 PHP
WordPress多语言翻译插件 - WPML使用教程
Apr 01 PHP
详解php中流行的rpc框架
May 29 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的FTP学习(一)
2006/10/09 PHP
PHP防盗链代码实例
2014/08/27 PHP
PHP使用GETDATE获取当前日期时间作为一个关联数组的方法
2015/03/19 PHP
PHP中error_reporting函数用法详细介绍
2017/06/11 PHP
PHP设计模式(一)工厂模式Factory实例详解【创建型】
2020/05/02 PHP
javascript操作cookie的文章(设置,删除cookies)
2010/04/01 Javascript
JS字符串截取函数实例
2013/12/27 Javascript
简介JavaScript中strike()方法的使用
2015/06/08 Javascript
avalon js实现仿google plus图片多张拖动排序附源码下载
2015/09/24 Javascript
javascript入门教程基础篇
2015/11/16 Javascript
基于Jquery easyui 选中特定的tab
2015/11/17 Javascript
js模糊查询实例分享
2016/12/26 Javascript
vue2笔记 — vue-router路由懒加载的实现
2017/03/03 Javascript
vue.js $refs和$emit 父子组件交互的方法
2017/12/20 Javascript
vue中get请求如何传递数组参数的方法示例
2019/11/08 Javascript
vue+Element-ui实现分页效果
2020/11/15 Javascript
Python中装饰器的一个妙用
2015/02/08 Python
Python中的测试模块unittest和doctest的使用教程
2015/04/14 Python
Python编写电话薄实现增删改查功能
2016/05/07 Python
浅析Python3爬虫登录模拟
2018/02/07 Python
Python学习笔记基本数据结构之序列类型list tuple range用法分析
2019/06/08 Python
pyqt 实现为长内容添加滑轮 scrollArea
2019/06/19 Python
django框架基于模板 生成 excel(xls) 文件操作示例
2019/06/19 Python
Python定时任务APScheduler原理及实例解析
2020/05/30 Python
详解Python中import机制
2020/09/11 Python
Python使用windows设置定时执行脚本
2020/11/12 Python
韩国商务邀请函
2014/01/14 职场文书
十八届三中全会感言
2014/03/10 职场文书
安全责任书范文
2014/03/12 职场文书
法人代表授权委托书范文
2014/09/10 职场文书
高三复习计划
2015/01/19 职场文书
毕业论文答辩演讲稿
2015/06/23 职场文书
酒店员工管理制度
2015/08/05 职场文书
教导处教学工作总结
2015/08/12 职场文书
幼儿园音乐教学反思
2016/02/18 职场文书
2019年大学生学年自我鉴定!
2019/03/25 职场文书