php curl批量發送http請求

來源:互聯網
上載者:User
引子:在Android4.0開發中,發送Http請求已經不允許在主進程中執行了,必須線上程中執行。原因在於Http介面回應時間有可能阻塞主進程事件監聽(對於.Net開發,其實也是如此)。但是,由於PHP並沒有多線程的概念,那麼,如何高效率在PHP中執行多次http請求呢?答案是使用curl_multi_init,由此,我做了一個實驗。

以下是類比請求的http介面,代碼很簡單,通過get傳入的參數time,控制了sleep的時間。

$s_time=intval($_GET['time']);sleep($s_time);echo 'hello';

接下來僅僅使用curl_init,代碼如下:

$start=microtime(true);for($i=1;$i<=5;++$i){$ch=curl_init("http://test.binbin.com/curl/test.php?time={$i}");curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);curl_exec($ch);}$end=microtime(true);echo $end-$start;

執行的時間約為15秒,是所有sleep時間總和,現在,來看看使用了curl_multi_init的時間

$start=microtime(true);$ch_list=array();$multi_ch=curl_multi_init();for($i=1;$i<=5;++$i){$ch_list[$i]=curl_init("http://test.binbin.com/curl/test.php?time={$i}");curl_setopt($ch_list[$i], CURLOPT_RETURNTRANSFER, true);curl_multi_add_handle($multi_ch, $ch_list[$i]);}$running=false;do {        usleep(10000);curl_multi_exec($multi_ch, $running);}while ($running>0);$end=microtime(true);echo $end-$start;
結果是僅僅需要5秒鐘,即使最長http請求的執行時間。

後記:看到不少的人在blog上反應使用curl_multi_init的CPU過高的問題,其實,是可以添加usleep解決的。因為,如果資料沒有返回curl_multi_exec會一直執行,消耗CPU資源。

以上就介紹了php curl批量發送http請求,包括了方面的內容,希望對PHP教程有興趣的朋友有所協助。

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.