老版地址(仅作固定作用):old.jincong.net

PHP使用curl_multi实现并发请求的方法示例

本文实例讲述了PHP使用cul_muli实现并发请求的方法。分享给大家供大家参考,具体如下:claCulMuliUil{/***根据ul,poDaa获取cul请求对象,这个比较简单,可以看官方文档*/pivaeai......
以下是【金聪采编】分享的内容全文:

本文实例讲述了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相关内容感兴趣的读者可查看本站专题:《php curl用法总结》、《PHP网络编程技巧总结》、《PHP数组(Array)操作技巧大全》、《php字符串(string)用法总结》、《PHP数据结构与算法教程》、《php程序设计算法总结》、《PHP运算与运算符用法总结》及《php常见数据库操作技巧汇总》

希望本文所述对大家PHP程序设计有所帮助。

金聪线报提示:[ PHP使用curl_multi实现并发请求的方法示例 ] 仅为会员分享交流,仅供学习、参考使用,请勿用于其他用途,如果想商业使用或者代理,请自行联系版权方获取授权。任何未获取授权的商业使用与本站无关,请自行承担相应责任。
本站不存储任何资源文件,敬请周知!
此资源仅供个人学习、研究使用,禁止非法转播或商业用途,请在获取后24小时内删除,如果你觉得满意,请寻求购买正版或获取授权!
免责申明:本站仅提供学习的平台,所有资料均来自于网络分享线索,版权归原创者所有!本站不提供任何保证,并不承担任何法律责任,如果对您的版权或者利益造成损害,请提供相应的资质证明,我们将于3个工作日内予以处理。版权申诉相关说明
本网站采用 BY-NC-SA 协议进行授权 转载请注明原文链接:PHP使用curl_multi实现并发请求的方法示例
221381
领取福利

微信扫码领取福利

微信扫码分享