zoukankan      html  css  js  c++  java
  • php使用curl模拟多线程发送请求

    每个PHP文件的执行是单线程的,但是php本身也可以用一些别的技术实现多线程并发比如用php-fpm进程,这里用curl模拟多线程发送请求。php的curl多线程是通过不断调用curl_multi_exec来获取内容,这里举一个demo来模拟一次curl多线程并发操作。

    //设置缓冲为0(也可以去php.ini设置)
    ini_set('output_buffering', 0);
    //打开输出缓冲区
    ob_start();
    //设置一个空数组
    $curl_Arr=[];
    //这里模拟20次请求
    for($i=0;$i<20;$i++){
        //开启curl连接
        $curl_Arr[$i]=curl_init("http://XXXX/test.php");
        //CURLOPT_RETURNTRANSFER 设置为1表示稍后执行的curl_exec函数的返回是URL的返回字符串,而不是把返回字符串定向到标准输出并返回TRUE;
        curl_setopt($curl_Arr[$i],CURLOPT_RETURNTRANSFER,1);
    }
    
    //创建批处理cURL句柄
    $mh = curl_multi_init();
    
    foreach($curl_Arr as $k => $ch){
        //curl句柄入栈增加
        curl_multi_add_handle($mh,$ch);
    }
    $active = null;
    while(count($curl_Arr)>0){
        //发起curl_multi请求
        @curl_multi_exec($mh,$active);
        foreach($curl_Arr as $k => $ch){
            //获取句柄的返回值
            if($result[$k]= curl_multi_getcontent($ch)){
                //输出结果
                echo "$result[$k]
    ";
                ob_flush();
                //把被释放的数据发送到浏览器
                flush();
                //关闭该句柄
                curl_multi_remove_handle($mh,$ch);
                unset($curl_Arr[$k]);
            }
        }
    }
    //关闭ouput_buffering机制
    ob_end_flush();
    //关闭"curl_mulit"句柄
    curl_multi_close($mh);

    我再服务器上建立一起请求的php页面命名为test.php,内容如下

    1 sleep(10);
    2 echo 'seccess';exit;

    表示等待十秒后数据下面语句。

    然后我在命令行执行该程序结果如下:

    上面代码中通过循环$curl_Arr数组来调用curl_multi_getcontent来查询是否有数据。有数据就输出并删除元素,直到$curl_Arr数组元素个数为0。

    该模拟多线程实现是通过使用curl的curl_multi系列函数能实现此功能的。至于该系列函数使用介绍,百度一搜一大把。这里就不做说明了。

    本文属原创内容,为了尊重他人劳动,转载请注明本文地址:

    https://www.cnblogs.com/luokakale/p/9900740.html

  • 相关阅读:
    sublime开启vim模式
    git命令行界面
    搬进Github
    【POJ 2886】Who Gets the Most Candies?
    【UVA 1451】Average
    【CodeForces 625A】Guest From the Past
    【ZOJ 3480】Duck Typing
    【POJ 3320】Jessica's Reading Problemc(尺取法)
    【HDU 1445】Ride to School
    【HDU 5578】Friendship of Frog
  • 原文地址:https://www.cnblogs.com/luokakale/p/9900740.html
Copyright © 2011-2022 走看看