博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PHP中巧用curl 并发减少获取第三方网页内容时间
阅读量:6227 次
发布时间:2019-06-21

本文共 2429 字,大约阅读时间需要 8 分钟。

前言:

在我们平时的程序中难免出现同时访问几个接口的情况,平时我们用curl进行访问的时候,一般都是单个、顺序访问,假如有3个接口,每个接口耗时500毫秒那么我们三个接口就要花费1500毫秒了,这个问题太头疼了严重影响了页面访问速度,有没有可能并发访问来提高速度呢?今天就简单的说一下,利用curl并发来提高页面访问速度, 希望大家多指导。

1、老的curl访问方式以及耗时统计

0) { $data = false; } curl_close($ch); return $data;}function microtime_float(){ list($usec, $sec) = explode(" ", microtime()); return ((float)$usec + (float)$sec);}$url_arr=array( "taobao"=>"http://www.taobao.com", "sohu"=>"http://www.sohu.com", "lai18"=>"http://www.lai18.com",);$time_start = microtime_float();$data=array();foreach ($url_arr as $key=>$val){ $data[$key]=curl_fetch($val);}$time_end = microtime_float();$time = $time_end - $time_start;echo "耗时:{$time}";?>

耗时:0.614秒

2、curl并发访问方式以及耗时统计

$url) { $timeout=2; $ch[$nch] = curl_init(); curl_setopt_array($ch[$nch], array( CURLOPT_URL => $url, CURLOPT_HEADER => false, CURLOPT_RETURNTRANSFER => true, CURLOPT_TIMEOUT => $timeout, )); curl_multi_add_handle($mh, $ch[$nch]); ++$nch; } /* wait for performing request */ do { $mrc = curl_multi_exec($mh, $running); } while (CURLM_CALL_MULTI_PERFORM == $mrc); while ($running && $mrc == CURLM_OK) { // wait for network if (curl_multi_select($mh, 0.5) > -1) { // pull in new data; do { $mrc = curl_multi_exec($mh, $running); } while (CURLM_CALL_MULTI_PERFORM == $mrc); } } if ($mrc != CURLM_OK) { error_log("CURL Data Error"); } /* get data */ $nch = 0; foreach ($urlarr as $moudle=>$node) { if (($err = curl_error($ch[$nch])) == '') { $res[$nch]=curl_multi_getcontent($ch[$nch]); $result[$moudle]=$res[$nch]; } else { error_log("curl error"); } curl_multi_remove_handle($mh,$ch[$nch]); curl_close($ch[$nch]); ++$nch; } curl_multi_close($mh); return $result;}$url_arr=array( "taobao"=>"http://www.taobao.com", "sohu"=>"http://www.sohu.com", "lai18"=>"http://www.lai18.com", );function microtime_float(){ list($usec, $sec) = explode(" ", microtime()); return ((float)$usec + (float)$sec);}$time_start = microtime_float();$data=curl_multi_fetch($url_arr);$time_end = microtime_float();$time = $time_end - $time_start; echo "耗时:{$time}";?>

耗时:0.316秒 帅气吧整个页面访问后端接口的时间节省了一半

转载地址:http://xqnna.baihongyu.com/

你可能感兴趣的文章
data guard 的部署
查看>>
枚举、模拟、递推
查看>>
sublime text 3安装
查看>>
awk-sed
查看>>
EXTJS4-----前言
查看>>
iOS11里判断Safari浏览器是无痕模式还是正常模式?
查看>>
zookeeper与kafka安装部署及java环境搭建(发布订阅模式)
查看>>
error C2244 "无法将函数定义与现有的声明匹配"的解决方法
查看>>
记一个 dubbo中hessian2反序列化 Map 的一个问题
查看>>
HDU_1505_矩阵中的最大矩形_dp
查看>>
HDU_1398_母函数
查看>>
leetcode_1039. Minimum Score Triangulation of Polygon_动态规划
查看>>
mysql 将时间戳与日期时间的转换
查看>>
个人作业-Week2 案例分析
查看>>
SVN提交错误及使用技巧
查看>>
服务器程序和应用程序
查看>>
hibernate执行过程
查看>>
C++专题(一)
查看>>
博客园。侧边公告代码
查看>>
[codevs3118]高精度除法<高精度>
查看>>