本文的标题是按我在实际项目中遇到的情况来表述的,其实这个标题并不准确,当我搞清楚问题的原因后,觉得准确的标题应该是 《关于nanohttpd (2.3.1)运行响应变慢的问题》,也就是说问题的发生与android平台和WIFI环境没有直接关系,与nanohttpd版本有关。

nanohttpd 是什么这就不介绍了,我们在开发一个项目时要在android平台上实现一个WEB服务,就用到了nanohttpd.确实挺好用的,这个框架很小,但扩展性很好,没花多少时间就实现项目需要的WEB服务,开发测试都正常。
但是android设备在WIFI环境下运行时,通过WEB访问,能感觉明显比接网线时要慢。很长时间我们都找不到问题的原因,都打算放弃nanohttpd另觅框架替代了,但是换框架重新开发代价比较大,实在舍不得,我还想再抢救一下,我就又在google上的一统找,发现2017年就有人在github/nanohttpd上提出了这个问题:
《Very slow loading in version 2.3.0》
https://github.com/NanoHttpd/nanohttpd/issues/318

我用的 nanohttpd 版本是2.3.1,也最近发布的版本(2016年),对症哦

nanohttpd这个项目版本更新很慢,最近一个release 版本2.3.1是2016年的,近4年没有release新版本

仔细看上面这个话题,你会发现有人已经找到了问题的规律,是HTTPSession构造方法中调用InetAddress.getHostName()方法导致变慢

进一步,查看nanohttpd的提交记录,发现最后一次PR合并(2019年),就是解决这个问题的

这是最后一次提交的链接:
https://github.com/NanoHttpd/nanohttpd/commit/cd37235110d6712204c77e2bdc463e84af6ed4e3

所以根本原因就是因为调用InetAddress.getHostName()方法要通过DNS解析来实现,导致产生网络访问,而花费大量时间,与android平台和WIFI环境无关,只是WIFI环境下网络访问延迟大,慢的更明显。

好了,现在问题搞清楚了,nanohttpd master分支上已经解决了这个问题,只是nanohttpd没有release版本。
所以解决问题的方法有如下可选:

使用快照版本

如果你不太讲究,不在意使用快照版本,那就啥也不改,直接下载nanohttpd源码,编译使用master分支下的快照版本2.3.2-SNAPSHOT

release to maven

如果你不希望使用快照版本,那就得自己编译master分支,release一个版本到maven中央仓库或你的私有仓库。
你也可以使用我发布到maven中央仓库的版本,

 <dependency><groupId>com.gitee.l0km</groupId><artifactId>nanohttpd</artifactId><version>2.3.4</version></dependency>

我复制了nanohttpd的仓库到码云
https://gitee.com/l0km/nanohttpd
我只是为了发布版本到maven中央仓库,修改了pom.xml(l0km分支),比如nanohttpd项目的groupID(com.gitee.l0km),以及为了在JDK8能正常编译而修改了javadoc插件参数等等

关于在android平台使用nanohttpd实现的http服务在WIFI环境下响应明显太慢的问题相关推荐

  1. android wifi视频监控软件,WiFi环境下Android智能视频监控系统研究与实现

    摘要: 在互联网飞速发展和移动互联网强势崛起的时代,科技产品服务于普通生活是新兴行业必然的发展趋势;监控系统是物联网时代各个领域必然争取的可控制系统.随着无线技术和移动终端设备的高歌猛进,移动终端智能 ...

  2. 国外开源IoT平台Thingsboard社区版本(V3.3.2)在Win10环境下进行源码编译及运行指南

    国外开源IoT平台Thingsboard社区版本源码编译及运行指南 1 下载 2 软件环境及版本 2.1 系统环境 2.2 数据库环境 2.3 前端环境 2.4 编译环境 2.5 应用环境 3 编译 ...

  3. Android平台利用OpenCL框架实现并行开发初试

    在我们熟知的桌面平台,GPU得到了极为广泛的应用,小到各种电子游戏,大到高性能计算,多核心.高并行化的GPU成为我们日常娱乐和科学研究必不可少的"利器".同样,在近些年兴起的移动平 ...

  4. Android平台RTMP推送端实现外部数据对接推送和录像

    背景 好多开发者在做Android平台RTMP推送对接的同时,除了编码前的数据外,还有些外部编码数据推送诉求,他们希望外部的编码音视频数据不止可以实现RTMP推送,还可以同时在推送端实时录制下来,本文 ...

  5. android 苹果 蓝牙版本怎么升级,Android平台AIDA64更新至1.53版新增实用功能,可查看蓝牙版本...

    Android系统和iOS有一个著名检测软件AIDA64,其中Android平台近期更新至1.53版,除了新增几款新机型的识别外,更是加入了蓝牙版本的查看,这对于蓝牙耳机爱好者来说简直是一大福音. 要 ...

  6. android 平台上使用opencl 调用gpu 进行加速

    其实去年就已经把Android上OpenCL的demo做出来了,但是由于种种原因一直没有开源– 嗯现在就不吝啬了~奉献给大家~ 后面在Android上还实现了很多种并行化的算法,比如SHA-1.HDR ...

  7. zaker在android内容好少,追求更好的阅读体验—Android平台ZAKER,鲜果联播对比评测...

    追求更好的阅读体验-Android平台ZAKER,鲜果联播对比评测 关于ZAKER的介绍可以先看下这位尾巴写的文章: Zaker:让我们惬意的阅读 下面就介绍一下鲜果联播: 鲜果联播Android H ...

  8. 关于Cocos2D-X 3.10在android平台上使用外接键盘无法响应的问题

    众所周知,当今大部分智能手机是没有物理键盘的,在使用cocos开发Android应用时,自然也就不会去注意不必要的键值的注册.然而有些时候,我们需要游戏具有高精度的操控体验,就会用到键盘.然而当我们在 ...

  9. Android本地服务器NanoHttpd配置Https双向认证

    一. 了解数字证书 在HTTPS的传输过程中,有一个非常关键的角色--数字证书,那什么是数字证书?又有什么作用呢? 所谓数字证书,是一种用于电脑的身份识别机制.由数字证书颁发机构(CA)对使用私钥创建 ...

  10. 在Ubuntu上编译opencv 2.4.13源码支持android平台操作步骤

    之前在https://blog.csdn.net/fengbingchun/article/details/96430706中编译过opencv源码用于海思平台,这里通过修改脚本编译opencv 2. ...

最新文章

  1. this和super的区别
  2. IPV6 ripng互联
  3. 流程的python-读《流畅的python》第一天
  4. P2048 [NOI2010]超级钢琴
  5. python中的赋值、浅拷贝和深拷贝
  6. CDS view里case - when - else关键字的用法
  7. 最近看了两本低代码的书
  8. oracle绑定值的结尾,Oracle Sql字符串多余空格处理方法小记
  9. MYSQL 当有两条重复数据时 保留一条
  10. 学计算机的能看出批图吗,高手教你:如何看出一张图有没有被P过?
  11. 堆排序时间复杂度_leetcode刷题(二):排序算法(归并排序,堆排序,桶排序)...
  12. 【java】第十三章、高级事件处理
  13. mathematica7.0 汉下载及汉化
  14. 【WebRTC】几个重要sdp参数描述
  15. Vivado 使用方法
  16. INVT英威腾GD200A系列变频器使用PID实现恒压供水功能的相关参数设置及接线
  17. 计算机的物理地址怎么写,电脑物理地址怎么查
  18. abel数值反演的matlab实现,Abel逆变换的MATLAB实现(未完成版)
  19. [Asp.net Core]局部视图
  20. 数据交换技术(*):电路交换,报文交换,分组交换的概念,特点和优缺点以及存储转发技术概念

热门文章

  1. 宝塔php爬虫无头浏览器,爬虫利器selenium和无头浏览器的使用
  2. 学习基础的html代码知识(入门篇)
  3. YOLO算法v1-v3原理通俗理解
  4. ubuntu搭建SVN客户端,右击提交或更新
  5. 自媒体平台数据统计分析爬虫系列教程文档
  6. MySQL 脱敏函数
  7. 计算机一级考试 文字录入,计算机一年级《文字录入》期末考试题(理论)B
  8. 基于pytorch+Resnet101加GPT搭建AI玩王者荣耀
  9. 《UML系统分析与设计》习题答案
  10. RoboWare studio学习笔记