PHP使用curl併發減少後端訪問時間的方法

2021-09-24 10:14:55 字數 1697 閱讀 5797

問題的引發

在我們平時的程式中有時候會出現同時訪問幾個介面的情況,我們都是用curl進行訪問,而這種訪問一般都是單個、順序訪問的。那麼問題來咯,假如有3個介面,每個介面耗時500毫秒,這樣三個介面就要花費1500毫秒了,這個問題很嚴重,嚴重影響了頁面訪問速度。

解決問題

有沒有可能併發訪問來提高速度呢?今天就簡單的說一下,利用 curl併發來提高頁面訪問速度

看看單個,順序curl訪問方式以及耗時統計

<?php

function curl_fetch($url, $timeout=3)

curl_close($ch);

return $data;

}function microtime_float()

$url_arr=array(

"taobao"=>"",

"sohu"=>"",

"sina"=>"",

);$time_start = microtime_float();

$data=array();

foreach ($url_arr as $key=>$val)

$time_end = microtime_float();

$time = $time_end - $time_start;

echo "耗時:";

?>

以上**執行結果如下:耗時:0.614秒  顯然這是不可取的。來看看併發的效果

curl併發訪問方式以及耗時統計

<?php

function curl_multi_fetch($urlarr=array())

/* wait for performing request */

do while (curlm_call_multi_perform == $mrc);

while ($running && $mrc == curlm_ok) while (curlm_call_multi_perform == $mrc);

}} if ($mrc != curlm_ok)

/* get data */

$nch = 0;

foreach ($urlarr as $moudle=>$node) else

curl_multi_remove_handle($mh,$ch[$nch]);

curl_close($ch[$nch]);

++$nch;

} curl_multi_close($mh);

return $result;

}$url_arr=array(

"taobao"=>"",

"sohu"=>"",

"sina"=>"",

);function microtime_float()

$time_start = microtime_float();

$data=curl_multi_fetch($url_arr);

$time_end = microtime_float();

$time = $time_end - $time_start;

echo "耗時:";

?>

執行後的結果:耗時:0.316秒  很明顯,時間減少了一半

PHP使用CURL詳解

curl是乙個非常強大的開源庫,支援很多協議,包括http ftp telnet等,我們使用它來傳送http請求。它給我 們帶來的好處是可以通過靈活的選項設定不同的http協議引數,並且支援https。curl可以根據url字首是 http 還是 https 自動選擇是否加密傳送內容。使用curl的...

PHP使用CURL詳解

curl是乙個非常強大的開源庫,支援很多協議,包括http ftp telnet等,我們使用它來傳送http請求。它給我 們帶來的好處是可以通過靈活的選項設定不同的http協議引數,並且支援https。curl可以根據url字首是 http 還是 https 自動選擇是否加密傳送內容。使用curl的...

PHP使用CURL詳解

curl是乙個非常強大的開源庫,支援很多協議,包括http ftp telnet等,我們使用它來傳送http請求。它給我 們帶來的好處是可以通過靈活的選項設定不同的http協議引數,並且支援https。curl可以根據url字首是 http 還是 https 自動選擇是否加密傳送內容。使用curl的...