欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

php----curl_multi实现并发

程序员文章站 2022-05-05 20:42:59
...

curl大家一定使用过,但并发使用的情况估计不多。但在某些情况下确实比较有用,比如在同一请求里面调用多个他方接口,传统方法我们需要串行请求接口:

file_get_contents('http://aa.php');//1
file_get_contents('http://bb.php');//2
file_get_contents('http://cc.php');//2

那在这里耗时为5秒,但curl的muti方法,我们只需2秒就可请求完毕,继续处理后面的逻辑.代码如下: 

$nodes = array('http://aa.php','http://bb.php','http://cc.php');

private function multiple_threads_request($nodes){

        $curl_arr = array();
        $result = array();
        // 创建批处理cURL句柄
        $master = curl_multi_init();
        $active = NULL;//连接数
        foreach ($nodes as $i=>$url)
        {
            // 创建一对cURL资源
            $curl_arr[$i] = curl_init($url); //初始化各个子连接
            // 设置URL和相应的选项
            curl_setopt($curl_arr[$i], CURLOPT_RETURNTRANSFER, true);
            // 增加句柄
            curl_multi_add_handle($master, $curl_arr[$i]);
        }
        //防卡死写法:执行批处理句柄
        //这里$active会被改写成当前未处理数
        //全部处理成功$active会变成0
        do {
            curl_multi_exec($master,$active);
        } while($active > 0);


        foreach($nodes as $i=>$url)
        {
            //获取输出的文本流
            $result[$i] = curl_multi_getcontent  ( $curl_arr[$i]  );
            // 移除curl批处理句柄资源中的某个句柄资源
            curl_multi_remove_handle($master, $curl_arr[$i]);
            //关闭cURL会话
            curl_close($curl_arr[$i]);
        }
        //关闭cURL会话
        curl_multi_close($master);
        return $result;
    }

 

相关标签: curl_multi