因为项目需要,发现一个一个发送请求实在太慢,无奈之下,我们可以封装一个并发处理的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;

最新文章

  1. Linux 命令备忘录(CentOS 7)
  2. C语言初学者代码中的常见错误与瑕疵(23)
  3. 程序中的@Override是什么意思
  4. 集合中list、ArrayList、LinkedList、Vector的区别、Collection接口的共性方法以及数据结构的总结
  5. Redis的简单介绍及在Windows下环境搭建
  6. hdu 4267 树形DP
  7. jquery个人笔记
  8. JavaScript高级程序设计—阅读笔记(第一部分)
  9. PureMVC(JS版)源码解析(五):SimpleCommand类
  10. 新浪微博布局学习——妙用TabHost
  11. listbox多选实现上下移动 js版和服务器版
  12. angularJS 系列(五)--controller AS 语法
  13. oracle目录操作
  14. python每天一个小练习-列表元素非唯一
  15. 【Python】【BugList13】req = requests.get(url=target)报错: (Caused by SSLError(SSLError(1, &#39;[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:777)&#39;)
  16. shell的case用法
  17. HTML自定义滚动条(仿网易邮箱滚动条)转载
  18. java-03-动手动脑
  19. spyder里的&quot;查找文件里的特定字符串&quot;非常方便
  20. Redis——基础数据结构

热门文章

  1. Java基础-IO流对象之File类
  2. gulp+webpack配置
  3. java web实现计划定时任务
  4. 即时通信系统Openfire分析之三:ConnectionManager 连接管理
  5. python---requests和beautifulsoup4模块的使用
  6. JavaScript setInterval 与 setTimeout 区别
  7. 2015/11/4用Python写游戏,pygame入门(4):获取鼠标的位置及运动
  8. pandas 实现rfm模型
  9. Java并发编程原理与实战四十二:锁与volatile的内存语义
  10. Eclipse安卓插件安装