Android 网络框架
android app开发中的最著名的几个网络框架。
android 原生 HttpUrlConnection(2.3以上 ), HttpClient(andriod 2.3 以下)
volley(google 推出)
适合高频低数据量的网络访问,数据量大时就很糟糕。
OKHttp
OkHttp 是一个相对成熟的解决方案,据说 Android4.4 的源码中可以看到 HttpURLConnection 已经替换成 OkHttp 实现了。在 Android 6.0 中底层的源码已经使用了 OKHttp ,这个是可以确定的。
retrofit
其实 retrofit 是根据 OKHttp 封装的框架,它的底层网络请求就是使用OKHttp的。
优点:
(1)支持 okhttp
(2)注解处理,简化代码
(3)支持上传和下载文件
(4)支持自己更换解析方式
(5)支持多种http请求库
官网或相关地址:
OKHttp 的 github 地址:https://github.com/square/retrofit
长连接和短连接
TCP连接会经过3次握手,传输数据,4次挥手过程。 如果tcp连接 长时间(2个小时)没有数据传输,则会主动断开。
长连接
建立连接-> 数据传输-> 保持连接(发送心跳数据) -> 数据传输-> ...断开连接
可以开启tcp的keepalive 功能,如果一个给定的连接在两小时内没有任何的动作,则服务器就向客户发一个探测报文段,客户主机必须处于以下4个状态之一:
- 客户主机依然正常运行,并从服务器可达。客户的TCP响应正常,而服务器也知道对方是正常的,服务器在两小时后将保活定时器复位。
- 客户主机已经崩溃,并且关闭或者正在重新启动。在任何一种情况下,客户的TCP都没有响应。服务端将不能收到对探测的响应,并在75秒后超时。服务器总共发送10个这样的探测 ,每个间隔75秒。如果服务器没有收到一个响应,它就认为客户主机已经关闭并终止连接。
- 客户主机崩溃并已经重新启动。服务器将收到一个对其保活探测的响应,这个响应是一个复位,使得服务器终止这个连接。
- 客户机正常运行,但是服务器不可达,这种情况与2类似,TCP能发现的就是没有收到探查的响应。
场景: 数据库,RTC等
短连接
连接→数据传输→关闭连接;
短连接是指通信双方有数据交互时,就建立一个TCP连接,数据发送完成后,则断开此TCP连接
(管理起来比较简单,存在的连接都是有用的连接,不需要额外的控制手段);
场景: HTTP
HTTP 协议
- 请求格式
请求行,请求头,空行,消息体 - 响应格式
状态行,相应头,空行,消息体