国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁技術文章
文章詳情頁

詳解PHP中curl_multi并發的實現

瀏覽:83日期:2022-09-09 18:49:21

PHP中的curl_multi系列函數可以實現同時請求多個URL來實現并發,而不是像普通curl函數那樣請求后會阻塞,直到結果返回才進行下一個請求。因此在批量請求URL時可通過curl_multi系列函數提升程序的運行效率。

curl普通請求

$startTime = microtime(true);$chArr = [];$optArr = [ CURLOPT_URL => ’http://www.httpbin.org/ip’, CURLOPT_HEADER => 0, CURLOPT_RETURNTRANSFER => 1,];$result = [];//創建多個curl資源并執行for ($i=0; $i<10; $i++) { $chArr[$i] = curl_init(); curl_setopt_array($chArr[$i], $optArr); $result[$i] = curl_exec($chArr[$i]); curl_close($chArr[$i]);}$endTime = microtime(true);echo sprintf('use time: %.3f s'.PHP_EOL, $endTime - $startTime);

use time: 6.080 s

curl_multi并發請求

$startTime = microtime(true);$chArr = [];$optArr = [ CURLOPT_URL => ’http://www.httpbin.org/ip’, CURLOPT_HEADER => 0, CURLOPT_RETURNTRANSFER => 1,];$result = [];//創建多個curl資源for ($i=0; $i<10; $i++) { $chArr[$i] = curl_init(); curl_setopt_array($chArr[$i], $optArr);}//創建批處理curl句柄$mh = curl_multi_init();//將單個curl句柄添加到批處理curl句柄中foreach ($chArr as $ch) { curl_multi_add_handle($mh, $ch);}//判斷操作是否仍在執行的標識的引用$active = null;/** * 本次循環第一次處理 $mh 批處理中的 $ch 句柄,并將 $mh 批處理的執行狀態寫入 $active, * 當狀態值等于 CURLM_CALL_MULTI_PERFORM 時,表明數據還在寫入或讀取中,執行循環, * 當第一次 $ch 句柄的數據寫入或讀取成功后,狀態值變為 CURLM_OK ,跳出本次循環,進入下面的大循環中。 */do { //處理在批處理棧中的每一個句柄 $mrc = curl_multi_exec($mh, $active);} while ($mrc == CURLM_CALL_MULTI_PERFORM);/** * 上面這段代碼中,是可以直接使用 $active > 0 來作為 while 的條件,如下: * do { * $mrc = curl_multi_exec($mh, $active); * } while ($active > 0); * 此時如果整個批處理句柄沒有全部執行完畢時,系統會不停的執行 curl_multi_exec 函數,從而導致系統CPU占用會很高, * 因此一般不采用這種方案,可以通過 curl_multi_select 函數來達到沒有需要讀取的程序就阻塞住的目的。 *//** * $active 為 true 時,即 $mh 批處理之中還有 $ch 句柄等待處理, * $mrc == CURLM_OK,即上一次 $ch 句柄的讀取或寫入已經執行完畢。 */while ($active && $mrc == CURLM_OK) { /** * 程序進入阻塞狀態,直到批處理中有活動連接(即 $mh 批處理中還有可執行的 $ch 句柄), * 這樣執行的好處是 $mh 批處理中的 $ch 句柄會在讀取或寫入數據結束后($mrc == CURLM_OK)進入阻塞階段, * 而不會在整個 $mh 批處理執行時不停地執行 curl_multi_exec 函數,白白浪費CPU資源。 */ if (curl_multi_select($mh) != -1) { //程序退出阻塞狀態繼續執行需要處理的 $ch 句柄 do { $mrc = curl_multi_exec($mh, $active); } while ($mrc == CURLM_CALL_MULTI_PERFORM); }}foreach ($chArr as $i=>$ch) { //獲取某個curl句柄的返回值 $result[$i] = curl_multi_getcontent($ch); //移除批處理句柄中的某個句柄資源 curl_multi_remove_handle($mh, $ch);}//關閉一組curl句柄curl_multi_close($mh);$endTime = microtime(true);echo sprintf('use time: %.3f s'.PHP_EOL, $endTime - $startTime);

use time: 0.599 s

通過對比上述程序的運行時間可以得知,使用curl_multi系列函數并發請求要比普通的curl函數依次請求效率高很多。

到此這篇關于詳解PHP中curl_multi并發的實現的文章就介紹到這了,更多相關PHP curl_multi并發內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: PHP
相關文章:
主站蜘蛛池模板: 国产一区二区三区精品久久呦 | 久草视频国产 | 高清国产美女一级a毛片 | 欧美成人免费观看的 | 久久成人18 | 欧美激情综合亚洲五月蜜桃 | 手机免费毛片 | 一级淫片免费视频 | 精品久久久久久久久免费影院 | 黄色网址在线免费观看 | 91亚洲精品成人一区 | 国产精品亚洲第一区柳州莫青 | 欧美俄罗斯一级毛片激情 | 毛片在线全部免费观看 | a毛片免费在线观看 | 国产一区免费在线观看 | 日本乱人伦片中文字幕三区 | 亚洲国产成人在线观看 | 久久国产欧美另类久久久 | 欧美激情久久久久久久久 | 久久一日本道色综合久 | 一级做人爱a视频正版免费 一级做性色a爱片久久片 | 日韩成人毛片高清视频免费看 | 久久不射网 | 一级aaaaaa毛片免费同男同女 | 亚洲永久中文字幕在线 | 国产三级精品在线 | 亚洲日韩视频免费观看 | 97久久精品视频 | 特级毛片www欧美 | 久久久久国产精品美女毛片 | 日本一道免费一区二区三区 | 99久久精品国产一区二区三区 | 秘书高跟黑色丝袜国产91在线 | 草草视频在线观看最新 | 国产xvideos国产在线 | 国产欧美精品三区 | 久久九| 在线观看精品自拍视频 | 综合亚洲精品一区二区三区 | aaa一级毛片 |