LINUX实操:php使用curl并发减少后端访问时间的方法分析
|
《LINUX实操:php使用curl并发减少后端访问时间的方法分析》要点: 本文实例讲述了php使用curl并发减少后端拜访时间的方法.分享给大家供大家参考,具体如下: 在我们平时的程序中难免出现同时拜访几个接口的情况,平时我们用curl进行拜访的时候,一般都是单个、顺序拜访,假如有3个接口,每个接口耗时500毫 秒那么我们三个接口就要花费1500毫秒了,这个问题太头疼了严重影响了页面拜访速度,有没有可能并发拜访来提高速度呢?今天就简单的说一下,利用 curl并发来提高页面拜访速度, 1、老的curl拜访方式以及耗时统计
<?php
function curl_fetch($url,$timeout=3){
$ch = curl_init();
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_TIMEOUT,$timeout);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
$data = curl_exec($ch);
$errno = curl_errno($ch);
if ($errno>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","sina"=>"http://www.sina.com.cn",);
$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并发拜访方式以及耗时统计
<?php
function curl_multi_fetch($urlarr=array()){
$result=$res=$ch=array();
$nch = 0;
$mh = curl_multi_init();
foreach ($urlarr as $nk => $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",);
function microtime_float()
{
list($usec,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秒 帅气吧整个页面拜访后端接口的时间节省了一半 3、curl相关参数 curl_close ― Close a cURL session 更多关于PHP相关内容感兴趣的读者可查看本站专题:《php curl用法总结》、《PHP数组(Array)操作技巧大全》、《PHP数据结构与算法教程》、《PHP数学运算技巧总结》、《php日期与时间用法总结》、《php面向对象程序设计入门教程》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》 希望本文所述对大家PHP程序设计有所赞助. (编辑:鄂州站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 如何在Linux上安排重启?
- linux – 如何同时设置niceness和process affinity?
- 在Linux下检测Python/GTK中的用户注销/关闭 – 未收到SIGTE
- linux-kernel – 如何设置intel_idle.max_cstate = 0来禁用
- 为什么/usr/include/linux/stddef.h为空?
- linux – 如何在unix上找到没有日志文件的死进程的原因?
- 当curl尝试解析主机时,如何更改php curl超时(curl err_no 6
- Linux上超过65536个TCP连接
- linux – 删除超过X分钟的文件
- linux – 有没有办法刷新正在运行的进程的stdout
