av一区二区在线观看_亚洲男人的天堂网站_日韩亚洲视频_在线成人免费_欧美日韩精品免费观看视频_久草视

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

詳解PHP中curl_multi并發(fā)的實(shí)現(xiàn)

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

PHP中的curl_multi系列函數(shù)可以實(shí)現(xiàn)同時(shí)請(qǐng)求多個(gè)URL來(lái)實(shí)現(xiàn)并發(fā),而不是像普通curl函數(shù)那樣請(qǐng)求后會(huì)阻塞,直到結(jié)果返回才進(jìn)行下一個(gè)請(qǐng)求。因此在批量請(qǐng)求URL時(shí)可通過(guò)curl_multi系列函數(shù)提升程序的運(yùn)行效率。

curl普通請(qǐng)求

$startTime = microtime(true);$chArr = [];$optArr = [ CURLOPT_URL => ’http://www.httpbin.org/ip’, CURLOPT_HEADER => 0, CURLOPT_RETURNTRANSFER => 1,];$result = [];//創(chuàng)建多個(gè)curl資源并執(zhí)行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并發(fā)請(qǐng)求

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

use time: 0.599 s

通過(guò)對(duì)比上述程序的運(yùn)行時(shí)間可以得知,使用curl_multi系列函數(shù)并發(fā)請(qǐng)求要比普通的curl函數(shù)依次請(qǐng)求效率高很多。

到此這篇關(guān)于詳解PHP中curl_multi并發(fā)的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)PHP curl_multi并發(fā)內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: PHP
相關(guān)文章:
主站蜘蛛池模板: 91av免费版 | 在线黄色影院 | 你懂的在线视频播放 | 综合亚洲视频 | 久久精品99国产精品日本 | 中文字幕精品一区二区三区精品 | 欧美一区二区三区在线 | 精品久久久久久久久久久久久 | 色偷偷噜噜噜亚洲男人 | 久草视频观看 | 亚洲日本一区二区 | 伊人伊人 | 精品欧美一区二区三区久久久 | 日本一区二区三区精品视频 | 一区二区三区精品视频 | 久久久久一区二区三区 | 四虎成人av | 国产色黄| 91看片免费 | 国产精品久久久久久久久久久免费看 | 久久久精品网 | 国产成人精品一区二区三区视频 | 日韩视频区 | 亚洲一区二区久久 | 日韩中文字幕免费在线观看 | 日韩欧美专区 | 国产精品欧美一区二区 | 欧美久久久久久 | 欧美日韩在线观看一区二区三区 | 在线国产中文字幕 | 国产美女精品 | 精品一区二区三区在线视频 | 成人影院在线视频 | 综合久久久| 日本免费一区二区三区 | 亚洲视频欧美视频 | 国产视频在线一区二区 | 国产xxxx岁13xxxxhd| 久久久久成人精品亚洲国产 | 日日操操 | 青青久在线视频 |