博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
curl_multi_init 操作实例
阅读量:6121 次
发布时间:2019-06-21

本文共 3011 字,大约阅读时间需要 10 分钟。

1. Method#multiRequest 接收需要处理的信息

这里的参数是我们所需要的处理的URL地址及其它信息。

/** * @param array ('key' => array()) * You can find 'key' inside of @method getApiMap * array('someMethodKey'=>array('url' => '',  *         'requestData' => 'post data',  *         'otherData' => 'some other data', *         'curlOptions' => array()))); */    public function multiRequest($array){    foreach($array as $k=>&$v) {        $v['url'] = $this->getApiURL($k);    }    return $this->_handleMultiResponse($this->_sendMultiRequest($array));}

2. Method#_sendMultiRequest()

/**     * Send multi request at same time     * @param array $data (     * array('url' => '',      *         'requestData' => 'post data',      *         'otherData' => 'some other data',     *         'curlOptions' => array()));     */    private function _sendMultiRequest(array $data)    {        $this->_logMultiRequest($data);        $conn = array();        //create the multiple cURL handle        $mh = curl_multi_init();        $_options = array(            CURLOPT_HEADER => false,            CURLOPT_POST => true,            CURLOPT_CONNECTTIMEOUT => $this->timeOut,            CURLOPT_TIMEOUT => $this->timeOut,            CURLOPT_RETURNTRANSFER => true,        );        foreach($data as $k=>$v) {            $options = CMap::mergeArray($_options, array(                CURLOPT_URL => $v['url'],                CURLOPT_POSTFIELDS => $v['requestData'],            ));            if (isset($v['curlOptions']) && is_array($v['curlOptions']) && !empty($v['curlOptions'])) {                $options = CMap::mergeArray($options, $v['curlOptions']);            }            $conn[$k] = curl_init();            curl_setopt_array($conn[$k], $options);            //add the two handles            curl_multi_add_handle($mh, $conn[$k]);        }                $active = null;         //execute the handles        do {            $mrc = curl_multi_exec($mh, $active);        } while ($mrc == CURLM_CALL_MULTI_PERFORM);        while ($active && $mrc == CURLM_OK) {            if (curl_multi_select($mh) != -1) {                do {                    $mrc = curl_multi_exec($mh, $active);                } while ($mrc == CURLM_CALL_MULTI_PERFORM);            }        }                $result = array();        foreach($data as $k=>$v) {            $result[$k] = array(                'curlInfo' => curl_getinfo($conn[$k]),                'response' => curl_multi_getcontent($conn[$k]),            );            //close the handles            curl_multi_remove_handle($mh, $conn[$k]);        }        curl_multi_close($mh);        $this->_logMultiResponse($result);        return $result;    }

3. Method#_handleMultiResponse()

private function _handleMultiResponse($result)    {        foreach($result as $k=>&$v) {            $handleMethod = '_handle'. ucfirst($k);            $v = $this->$handleMethod($v['response']);        }                return $result;    }

从处理返回方法可以看到,我们仍然需要单独去处理每一个请求的返回,并返回!

转载于:https://www.cnblogs.com/mztest/archive/2013/04/27/3047140.html

你可能感兴趣的文章
linux:yum和apt-get的区别
查看>>
Sentinel 1.5.0 正式发布,引入 Reactive 支持
查看>>
如何对网站进行归档
查看>>
数据库之MySQL
查看>>
2019/1/15 批量删除数据库相关数据
查看>>
数据类型的一些方法
查看>>
Mindjet MindManager 2019使用教程:
查看>>
游戏设计的基本构成要素有哪些?
查看>>
详解 CSS 绝对定位
查看>>
AOP
查看>>
我的友情链接
查看>>
NGUI Label Color Code
查看>>
.NET Core微服务之基于Polly+AspectCore实现熔断与降级机制
查看>>
vue组件开发练习--焦点图切换
查看>>
浅谈OSI七层模型
查看>>
Webpack 2 中一些常见的优化措施
查看>>
移动端响应式
查看>>
python实现牛顿法求解求解最小值(包括拟牛顿法)【最优化课程笔记】
查看>>
js中var、let、const的区别
查看>>
腾讯云加入LoRa联盟成为发起成员,加速推动物联网到智联网的进化
查看>>