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 相关文章推荐
关于文本留言本的分页代码
Oct 09 PHP
随时给自己贴的图片加文字的php代码
Mar 08 PHP
WINDOWS下php5.2.4+mysql6.0+apache2.2.4+ZendOptimizer-3.3.0配置
Mar 28 PHP
PHP+MYSQL会员系统的登陆即权限判断实现代码
Sep 23 PHP
浅析PHP中的字符串编码转换(自动识别原编码)
Jul 02 PHP
codeigniter使用技巧批量插入数据实例方法分享
Dec 31 PHP
PHP编译安装中遇到的两个错误和解决方法
Aug 20 PHP
php中cookie实现二级域名可访问操作的方法
Nov 11 PHP
php 把数字转换成汉字的代码
Jul 21 PHP
在PHP语言中使用JSON和将json还原成数组的方法
Jul 19 PHP
/etc/php-fpm.d/www.conf 配置注意事项
Feb 04 PHP
Mac下快速搭建PHP开发环境步骤详解
May 05 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为表单获取的URL 地址预设 http 字符串函数代码
2010/05/26 PHP
php实现删除指定目录下相关文件的方法
2014/10/20 PHP
清华大学出版的事半功倍系列 javascript全部源代码
2007/05/04 Javascript
Tinymce+jQuery.Validation使用产生的BUG
2010/03/29 Javascript
让低版本浏览器支持input的placeholder属性(js方法)
2013/04/03 Javascript
JQuery结合CSS操作打印样式的方法
2013/12/24 Javascript
jquery解析JSON数据示例代码
2014/03/17 Javascript
JS自定义对象实现Java中Map对象功能的方法
2015/01/20 Javascript
基于jQuery实现仿百度首页换肤背景图片切换代码
2015/08/25 Javascript
jquery div模态窗口的简单实例
2016/05/28 Javascript
JS实现兼容各种浏览器的高级拖动方法完整实例【测试可用】
2016/06/21 Javascript
jQuery插件form-validation-engine正则表达式操作示例
2017/02/09 Javascript
vue中eventbus被多次触发以及踩过的坑
2017/12/02 Javascript
详解JavaScript的内存空间、赋值和深浅拷贝
2019/04/17 Javascript
vscode 插件开发 + vue的操作方法
2020/06/05 Javascript
[05:08]顺网杯ISS-DOTA2赛歌 少女偶像Lunar青春演绎
2013/12/05 DOTA
python实现在windows服务中新建进程的方法
2015/06/30 Python
详解Golang 与python中的字符串反转
2017/07/21 Python
Python(TensorFlow框架)实现手写数字识别系统的方法
2018/05/29 Python
利用Python对文件夹下图片数据进行批量改名的代码实例
2019/02/21 Python
解决pycharm 远程调试 上传 helpers 卡住的问题
2019/06/27 Python
html5 利用重力感应实现摇一摇换颜色可用来做抽奖等等
2014/05/07 HTML / CSS
深入了解canvas在移动端绘制模糊的问题解决
2019/04/30 HTML / CSS
草莓网英国官网:Strawberrynet UK
2017/02/12 全球购物
美国新娘礼品店:The Paisley Box
2020/09/08 全球购物
CHRONEXT英国:您的首选奢华腕表目的地
2020/03/30 全球购物
应届生如何写自荐信
2014/01/05 职场文书
关于母亲节的感言
2014/02/04 职场文书
房产协议书范本2014
2014/09/30 职场文书
2014年学生会工作总结范文
2014/11/07 职场文书
店铺转让协议书
2015/01/29 职场文书
质量负责人岗位职责
2015/02/15 职场文书
傲慢与偏见读书笔记
2015/06/29 职场文书
Python基础之数据类型知识汇总
2021/05/18 Python
解决Maven项目中 Invalid bound statement 无效的绑定问题
2021/06/15 Java/Android
关于PostgreSQL JSONB的匹配和交集问题
2021/09/14 PostgreSQL