佳木斯湛栽影视文化发展公司

主頁(yè) > 知識(shí)庫(kù) > PHP使用curl_multi實(shí)現(xiàn)并發(fā)請(qǐng)求的方法示例

PHP使用curl_multi實(shí)現(xiàn)并發(fā)請(qǐng)求的方法示例

熱門(mén)標(biāo)簽:阿里云 銀行業(yè)務(wù) 服務(wù)器配置 團(tuán)購(gòu)網(wǎng)站 電子圍欄 Linux服務(wù)器 科大訊飛語(yǔ)音識(shí)別系統(tǒng) Mysql連接數(shù)設(shè)置

本文實(shí)例講述了PHP使用curl_multi實(shí)現(xiàn)并發(fā)請(qǐng)求的方法。分享給大家供大家參考,具體如下:

class CurlMultiUtil {
  /**
  * 根據(jù)url,postData獲取curl請(qǐng)求對(duì)象,這個(gè)比較簡(jiǎn)單,可以看官方文檔
  */
  private static function getCurlObject($url,$postData=array(),$header=array()){
    $options = array();
    $url = trim($url);
    $options[CURLOPT_URL] = $url;
    $options[CURLOPT_TIMEOUT] = 3;
    $options[CURLOPT_RETURNTRANSFER] = true;
    foreach($header as $key=>$value){
      $options[$key] =$value;
    }
    if(!empty($postData)  is_array($postData)){
      $options[CURLOPT_POST] = true;
      $options[CURLOPT_POSTFIELDS] = http_build_query($postData);
    }
    if(stripos($url,'https') === 0){
      $options[CURLOPT_SSL_VERIFYPEER] = false;
    }
    $ch = curl_init();
    curl_setopt_array($ch,$options);
    return $ch;
  }
  /**
   * [request description]
   * @param [type] $chList
   * @return [type]
   */
  private static function request($chList){
    $downloader = curl_multi_init();
    // 將三個(gè)待請(qǐng)求對(duì)象放入下載器中
    foreach ($chList as $ch){
      curl_multi_add_handle($downloader,$ch);
    }
    $res = array();
    // 輪詢(xún)
    do {
      while (($execrun = curl_multi_exec($downloader, $running)) == CURLM_CALL_MULTI_PERFORM);
      if ($execrun != CURLM_OK) {
        break;
      }
      // 一旦有一個(gè)請(qǐng)求完成,找出來(lái),處理,因?yàn)閏url底層是select,所以最大受限于1024
      while ($done = curl_multi_info_read($downloader)){
        // 從請(qǐng)求中獲取信息、內(nèi)容、錯(cuò)誤
        // $info = curl_getinfo($done['handle']);
        $output = curl_multi_getcontent($done['handle']);
        // $error = curl_error($done['handle']);
        $res[] = $output;
        // 把請(qǐng)求已經(jīng)完成了得 curl handle 刪除
        curl_multi_remove_handle($downloader, $done['handle']);
      }
      // 當(dāng)沒(méi)有數(shù)據(jù)的時(shí)候進(jìn)行堵塞,把 CPU 使用權(quán)交出來(lái),避免上面 do 死循環(huán)空跑數(shù)據(jù)導(dǎo)致 CPU 100%
      if ($running) {
        $rel = curl_multi_select($downloader, 1);
        if($rel == -1){
          usleep(1000);
        }
      }
      if($running == false){
        break;
      }
    }while(true);
    curl_multi_close($downloader);
    return $res;
  }
  /**
   * [get description]
   * @param [type] $urlArr
   * @return [type]
   */
  public static function get($urlArr){
    $data = array();
    if (!empty($urlArr)) {
      $chList = array();
      foreach ($urlArr as $key => $url) {
        $chList[] = self::getCurlObject($url);
      }
      $data = self::request($chList);
    }
    return $data;
  }
}

更多關(guān)于PHP相關(guān)內(nèi)容感興趣的讀者可查看本站專(zhuān)題:《php curl用法總結(jié)》、《PHP網(wǎng)絡(luò)編程技巧總結(jié)》、《PHP數(shù)組(Array)操作技巧大全》、《php字符串(string)用法總結(jié)》、《PHP數(shù)據(jù)結(jié)構(gòu)與算法教程》、《php程序設(shè)計(jì)算法總結(jié)》、《PHP運(yùn)算與運(yùn)算符用法總結(jié)》及《php常見(jiàn)數(shù)據(jù)庫(kù)操作技巧匯總》

希望本文所述對(duì)大家PHP程序設(shè)計(jì)有所幫助。

您可能感興趣的文章:
  • php多進(jìn)程并發(fā)編程防止出現(xiàn)僵尸進(jìn)程的方法分析
  • PHP高并發(fā)和大流量解決方案整理
  • PHP 并發(fā)場(chǎng)景的幾種解決方案
  • PHP下用Swoole實(shí)現(xiàn)Actor并發(fā)模型的方法
  • php多進(jìn)程模擬并發(fā)事務(wù)產(chǎn)生的問(wèn)題小結(jié)
  • PHP利用Mysql鎖解決高并發(fā)的方法
  • PHP curl批處理及多請(qǐng)求并發(fā)實(shí)現(xiàn)方法分析
  • php curl批處理實(shí)現(xiàn)可控并發(fā)異步操作示例
  • 詳解PHP服務(wù)器如何在有限的資源里最大提升并發(fā)能力

標(biāo)簽:衢州 大理 衡水 萍鄉(xiāng) 棗莊 廣元 蚌埠 江蘇

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《PHP使用curl_multi實(shí)現(xiàn)并發(fā)請(qǐng)求的方法示例》,本文關(guān)鍵詞  ;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話(huà)咨詢(xún)

    • 400-1100-266
    宜兴市| 滕州市| 多伦县| 岳阳市| 宁都县| 文成县| 修武县| 丰县| 五常市| 开江县| 资兴市| 云霄县| 阜康市| 黄山市| 特克斯县| 荣成市| 马山县| 连山| 法库县| 丰县| 新昌县| 新郑市| 乳山市| 上高县| 大田县| 青龙| 尼玛县| 潜江市| 乳山市| 宜兴市| 车致| 成都市| 盖州市| 抚远县| 金寨县| 炉霍县| 江达县| 濮阳县| 大英县| 定结县| 岳普湖县|