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程序设计有所赞助. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |