• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

自己封装的phpCurl并发处理,欢迎提出问题优化。

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

因为项目需要,发现一个一个发送请求实在太慢,无奈之下,我们可以封装一个并发处理的curl请求批处理句柄来减少重复创建句柄的问题

代码如下:

/*
 *@param array $data url的参数
 *@param  string $url  url地址
 *@return array $retsult  结果序列
*/
function getmulti($data,$url){
//组合url参数
$ch = array();
$mh = curl_multi_init();
$result = array();
foreach ($data as $k => $v) {
    $query[$k] = http_build_query($v);
    $ch[$k] = curl_init();
    $options = array(
        CURLOPT_URL=> $url.'?'.$query[$k],
        CURLOPT_TIMEOUT => 50,
        CURLOPT_HEADER => 0,
        CURLOPT_RETURNTRANSFER => TRUE,
);
curl_setopt_array($ch[$k], $options);
  
curl_multi_add_handle($mh,$ch[$k]);
}
$active = null;
// 执行批处理句柄
do {
   $mrc = curl_multi_exec($mh, $active);
} while ($active > 0);
foreach ($ch as $ck => $cv) {
    $result[] = curl_multi_getcontent($cv);
    usleep(1);
    curl_multi_remove_handle($mh, $cv);
}
  
curl_multi_close($mh);
  
//echo $options[CURLOPT_URL];die();
  
return $result;
}
//example:
$data = array(
                'happy'=>array('emotion'=>'happy', 'tag'=>'男人'),   
                'anger'=>array('emotion'=>'anger', 'tag'=>'男人'),   
                'sad'=>array('emotion'=>'sad', 'tag'=>'男人'),   
                'fear'=>array('emotion'=>'fear', 'tag'=>'男人'), 
                'surprise'=>array('emotion'=>'surprise', 'tag'=>'男人'), 
                'none'=>array('emotion'=>'none', 'tag'=>'男人'),
        );
        $newdata = array();
        $hotres = '';
        $url = 'http://www.xxx.com/demo/getEmotionDetails.jsp';
        $startime = time().'<br />';
        echo '开始时间:'.$startime;
        foreach ($data as $k=>$v){
            //$hotres = $this->get($data, $url);
            //$hotres = $this->get($v, $url);
            $hotres = file_get_contents($url.'?'.http_build_query($v));
            //$newdata[] = object_to_array(json_decode($hotres));
            $newdata[] = $hotres;
        }
        /*      foreach ($hotres as $hk=>$hv){
         $newdata[$data[$hk]['emotion']] = object_to_array(json_decode($hv));
        } */
        echo '消耗时间:'.(time()-$startime).'<br />';
        echo '结束时间:'.time().'<br />';
  
        echo '<pre>';print_r($newdata);exit;

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
windows下php使用zerophp发布时间:2022-07-10
下一篇:
php 2038年问题发布时间:2022-07-10
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap