• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    PHP使用curl_multi实现并发请求的方法示例

    本文实例讲述了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多进程并发编程防止出现僵尸进程的方法分析
    • PHP高并发和大流量解决方案整理
    • PHP 并发场景的几种解决方案
    • PHP下用Swoole实现Actor并发模型的方法
    • php多进程模拟并发事务产生的问题小结
    • PHP利用Mysql锁解决高并发的方法
    • PHP curl批处理及多请求并发实现方法分析
    • php curl批处理实现可控并发异步操作示例
    • 详解PHP服务器如何在有限的资源里最大提升并发能力
    上一篇:PHP实现转盘抽奖算法分享
    下一篇:PHP性能测试工具xhprof安装与使用方法详解
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯

    时间:9:00-21:00 (节假日不休)

    地址:江苏信息产业基地11号楼四层

    《增值电信业务经营许可证》 苏B2-20120278

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