中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何在PHP中使用curl_multi實現一個并發請求

發布時間:2021-02-07 21:37:24 來源:億速云 閱讀:248 作者:Leah 欄目:開發技術

這期內容當中小編將會給大家帶來有關如何在PHP中使用curl_multi實現一個并發請求,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

具體如下:

class CurlMultiUtil {
  /**
  * 根據url,postData獲取curl請求對象,這個比較簡單,可以看官方文檔
  */
  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();
    // 將三個待請求對象放入下載器中
    foreach ($chList as $ch){
      curl_multi_add_handle($downloader,$ch);
    }
    $res = array();
    // 輪詢
    do {
      while (($execrun = curl_multi_exec($downloader, $running)) == CURLM_CALL_MULTI_PERFORM);
      if ($execrun != CURLM_OK) {
        break;
      }
      // 一旦有一個請求完成,找出來,處理,因為curl底層是select,所以最大受限于1024
      while ($done = curl_multi_info_read($downloader)){
        // 從請求中獲取信息、內容、錯誤
        // $info = curl_getinfo($done['handle']);
        $output = curl_multi_getcontent($done['handle']);
        // $error = curl_error($done['handle']);
        $res[] = $output;
        // 把請求已經完成了得 curl handle 刪除
        curl_multi_remove_handle($downloader, $done['handle']);
      }
      // 當沒有數據的時候進行堵塞,把 CPU 使用權交出來,避免上面 do 死循環空跑數據導致 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;
  }
}

上述就是小編為大家分享的如何在PHP中使用curl_multi實現一個并發請求了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

绵竹市| 天峨县| 扎兰屯市| 晋宁县| 娄烦县| 滦南县| 邹城市| 兴安县| 高密市| 福清市| 于田县| 湖北省| 抚松县| 惠来县| 平定县| 永善县| 丰镇市| 隆回县| 古交市| 遂平县| 昌邑市| 信丰县| 凉城县| 梁河县| 榕江县| 新干县| 乡宁县| 龙里县| 海丰县| 武宁县| 盐池县| 安化县| 彰化市| 贵州省| 长治市| 海口市| 宣武区| 临湘市| 鄂温| 襄垣县| 商城县|