php curl 非同步併發請求http

2021-09-24 21:27:03 字數 2019 閱讀 3270

先來看下同步的**以及請求時間。

$start_time=date("h:i:sa");

for ($i=0; $i <100 ; $i++)

function geturl($url)

function gettitle($output)

$end_time=date("h:i:sa");

echo '開始時間是:'.$start_time;

echo '結束時間是:'.$end_time;

最下面可以看到時間花了27秒。

接下來看下php curl 非同步併發請求http的**以及花費時間。

$start_time=date("h:i:sa");

$urls=;

for ($i=0; $i <100 ; $i++)

var_dump($urls);

// gettitle('klasjdkla313asds12');

rolling_curl($urls,'gettitle');

function gettitle($output)

$end_time=date("h:i:sa");

echo '開始時間是:'.$start_time;

echo '結束時間是:'.$end_time;

才花了3秒?實際上我感覺應該是花了5秒,因為啟動比同步要慢,開始的時候卡了2秒。

http請求效率,毋庸置疑是非同步遠遠高於同步。

核心請求**如下:(這是老外寫的,有點小問題,最後的提示undefined offset)

function rolling_curl($urls, $callback, $custom_options = null)

do // a request was just completed -- find out which one

while ($done = curl_multi_info_read($master)) else

}} while ($running);

curl_multi_close($master);

return true;

}

修改一下。只要在新增url的時候加個判斷就好了。// 當$i等於$urls陣列大小時不用再增加了。

function rolling_curl($urls, $callback, $custom_options = null)

do // a request was just completed -- find out which one

while ($done = curl_multi_info_read($master))

// remove the curl handle that just completed

curl_multi_remove_handle($master, $done['handle']);

} else

}} while ($running);

curl_multi_close($master);

return true;

}

PHP curl併發請求

使用php的curl函式呼叫多個外部http介面時,預設情況下是需要乙個乙個執行的,第乙個請求結束後才會發起第二個請求,這樣會顯得效率低。如果各個請求之間沒有強依賴關係,可以使用curl的multi系列函式來同時發起多個請求,這樣可以節省很多時間,提高效率。有很多資料說curl multi是使用多執...

PHP curl請求方法

curl請求方法 author zt8067 param url string param data array json param header array curlopt httpheader 設定 http 頭字段的陣列。格式 array content type text plain co...

PHP curl 模擬http https請求

模擬使用者瀏覽器post public static function vpost url,data curl curl init 啟動乙個curl會話 curl setopt curl,curlopt url,url 要訪問的位址 curl setopt curl,curlopt ssl veri...