zoukankan      html  css  js  c++  java
  • curl实现多路并发请求(请求数量大时再次分割实现循环处理)

    function multiple_threads_request($data,$url,$chuck_num=20,$wait_usec = 0){
        $result = [];
        if (empty($data) || empty($url)) {
            $send_data = array_chunk($data, $chuck_num,true);
            foreach ($send_data as $son_data){
                $mh = curl_multi_init(); //初始化一个curl批处理句柄资源
                $handle = [];
                foreach ($son_data as $k=>$val)
                {
                    $curl_array[$k] = curl_init($url);
                    curl_setopt($handle[$k], CURLOPT_RETURNTRANSFER, 1);
                    curl_setopt($handle[$k], CURLOPT_SSL_VERIFYPEER, false);
                    curl_setopt($handle[$k], CURLOPT_SSL_VERIFYHOST, false);
                    curl_setopt($handle[$k], CURLOPT_POST, 1);
                    curl_setopt($handle[$k], CURLOPT_TIMEOUT,10);
                    curl_setopt($handle[$k], CURLOPT_HEADER, 0);
                    curl_setopt($handle[$k], CURLOPT_POSTFIELDS,$val);
                    //向curl批处理句柄资源中添加单独的curl句柄资源。curl_multi_add_handle函数有两个参数,第一个参数表示一个curl批处理句柄资源
                    //第二个参数表示一个单独的curl句柄资源
                    curl_multi_add_handle($mh, $handle[$k]);
                }
                $running = 0;
                do {
                    //解析一个curl批处理句柄,curl_multi_exec函数有两个参数,第一个表示一个批处理句柄资源,第二个参数是一个应用值参数,表示
                    //剩余需要处理的单个的curl句柄资源。
                    curl_multi_exec($mh, $running);//持续调用curl_multi_exec
                    if ($wait_usec > 0) /* 每个 connect 要间隔多久 */
                        usleep($wait_usec); // 250000 = 0.25 sec
                } while ($running > 0);
    
                foreach ($son_data as $k=>$val)
                {
                    $return = curl_multi_getcontent($handle[$k]);//根据需要循环调用curl_multi_getcontent
                    $return[$k] = (curl_errno($handle[$k]) == 0) ? $return : false;
                    $http_code = curl_getinfo($handle[$k],CURLINFO_HTTP_CODE); //获取http错误码
                    $curl_error = curl_error($handle[$k]); //获取curl错误码
                    //移除curl批处理句柄资源中的某个句柄资源,curl_multi_remove_handle()函数有两个参数,第一个参数表示一个curl批处理句柄资源,第二个参数表示一个单独的curl句柄资源。
                    curl_multi_remove_handle($mh,$handle[$k]);
                }
                curl_multi_close($mh);
            }
        }
    
        return $result;
    }
  • 相关阅读:
    solr7之solrJ的使用
    solr7.3.1在CentOS7上的安装
    nginx配置:location配置方法及实例详解
    [读书]10g/11g编程艺术深入体现结构学习笔记(持续更新...)
    liunx系统计划任务管理(at/crond调度)
    Golden Gate 概念和机制
    Oracle三大经典表连接适用情况
    Oracle索引简单介绍与示例
    Oracle RAC的日志体系
    Oracle10g RAC的简单操作
  • 原文地址:https://www.cnblogs.com/quepq/p/9860564.html
Copyright © 2011-2022 走看看