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 动态多文件上传
Jan 18 PHP
火车头discuz6.1 完美采集的php接口文件
Sep 13 PHP
php中拷贝构造函数、赋值运算符重载
Jul 25 PHP
php中url传递中文字符,特殊危险字符的解决方法
Aug 17 PHP
SSO单点登录的PHP实现方法(Laravel框架)
Mar 23 PHP
php无限级分类实现方法分析
Oct 19 PHP
PHP文件操作详解
Dec 30 PHP
php 浮点数比较方法详解
May 05 PHP
php实现文章评论系统
Feb 18 PHP
PHP实现的数据对象映射模式详解
Mar 20 PHP
PHP的cookie与session原理及用法详解
Sep 27 PHP
laravel 框架实现无限级分类的方法示例
Oct 31 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实例分享之通过递归实现删除目录下的所有文件详解
2014/05/15 PHP
smarty模板引擎之内建函数用法
2015/03/30 PHP
详解如何在云服务器上部署Laravel
2017/06/30 PHP
php-msf源码详解
2017/12/25 PHP
关于使用runtimeStyle属性问题讨论文章
2007/03/08 Javascript
添加JavaScript重载函数的辅助方法2
2010/07/04 Javascript
js报错 Object doesn't support this property or method的原因分析
2011/03/31 Javascript
使用js对select动态添加和删除OPTION示例代码
2013/08/12 Javascript
jQuery+css实现百度百科的页面导航效果
2014/12/16 Javascript
JS文字球状放大效果代码分享
2015/08/19 Javascript
JavaScript实现的伸展收缩型菜单代码
2015/10/14 Javascript
js获取隐藏元素宽高的实现方法
2016/05/19 Javascript
jquery移除了live()、die(),新版事件绑定on()、off()的方法
2016/10/26 Javascript
js实现短信发送倒计时功能(正则验证)
2017/02/10 Javascript
jQuery+Ajax实现用户名重名实时检测
2017/06/01 jQuery
vue 项目中使用Loading组件的示例代码
2018/08/31 Javascript
vue实现百度下拉列表交互操作示例
2019/03/12 Javascript
详解Vue前端生产环境发布配置实战篇
2019/05/07 Javascript
Vue路由前后端设计总结
2019/08/06 Javascript
extjs图表绘制之条形图实现方法分析
2020/03/06 Javascript
[02:25]DOTA2英雄基础教程 虚空假面
2014/01/02 DOTA
[34:39]Secret vs VG 2018国际邀请赛淘汰赛BO3 第二场 8.23
2018/08/24 DOTA
python开启多个子进程并行运行的方法
2015/04/18 Python
Python连接DB2数据库
2016/08/27 Python
Python找出微信上删除你好友的人脚本写法
2018/11/01 Python
python 为什么说eval要慎用
2019/03/26 Python
Python Process多进程实现过程
2019/10/22 Python
python基于socket函数实现端口扫描
2020/05/28 Python
Python类super()及私有属性原理解析
2020/06/15 Python
css3 图片圆形显示 如何CSS将正方形图片显示为圆形图片布局
2014/10/10 HTML / CSS
KIKO比利时官网:意大利彩妆品牌
2017/07/23 全球购物
《七颗钻石》教学反思
2014/02/28 职场文书
教师节慰问信
2015/02/15 职场文书
中学综治宣传月活动总结
2015/05/07 职场文书
清明节随笔
2015/08/15 职场文书
话题作文之呼唤
2019/12/18 职场文书