相关视频:
相关文章:
Okhttp与其他网络框架的对比:
常见问题一:简述一下OkHttp
OkHttp是一个非常优秀的网络请求框架,已被谷歌加入到Android的源码中。目前比较流行的Retrofit也是默认使用OkHttp的。
- 支持HTTP1.0、HTTP1.1、HTTP2.0、SPDY
- 支持同步异步
- 可以缓存响应数据,来减少重复的网络请求
- 可以从很多常用的连接问题中自动恢复
- 使用简单(api多,可扩展性好)
常见问题二:看过OkHttp的源码吗,简单说一下
上面是OKHttp总体设计图,主要是通过Diapatcher不断从RequestQueue中取出请求(Call),根据是否已缓存调用Cache或Network这两类数据获取接口之一,从内存缓存或是服务器取得请求的数据。该引擎有同步和异步请求,同步请求通过Call.execute()直接返回当前的Response,而异步请求会把当前的请求Call.enqueue添加(AsyncCall)到请求队列中,并通过回调(Callback)的方式来获取最后结果。
一、基本知识:
(一)、HTTP协议结构:
请求头
- 表明本次请求的客户端
- 本次请求所使用的cookie
- 本次请求希望返回的数据类型
- 本次请求是否采用数据压缩等等一系列设置
请求体
- 指定本次请求所使用的方法
- 主要用来携带本次请求的参数
响应头
- 服务器标识
- 状态码
- 内容编码
- 返回给客户端的cookie等
响应体
- 本次请求所返回的数据
(二)、HTTP工作流程
首先客户机与服务器需要建立连接(通过socket)
建立连接后,客户机发送一个请求给服务器
服务器接到请求后,给予相应的响应信息
客户端接受服务器所返回的信息,连接断开
(三)、HTTP优势:
- 简单快速
- 灵活
- 无连接
- 无状态
解释:其中最重要的事无连接和无状态,在早期的互联网中,由于协议都是一些比较简单的协议,内容基本上都是一些静态的页面、图片等,所以无连接、无状态的HTTP可以发挥自己简单快速、灵活的优势。 但随着业务逻辑越来越复杂以及我们对安全性的重视,无连接、无状态反而成为了HTTP的劣势,所以也就又来后来更加高级的互联网协议的诞生。
(四)、SPDY(发音spidi)
- SPDY是一种HTTP的兼容协议
- 支持多路复用请求
- 对请求划分优先级(优先返回文字,图片音频等随后返回)
- 压缩HTTP头,以减少请求数据量
(五)、HTTP2.0介绍
- 基于SPDY,IETF定制的新一代HTTP
- 拥有更安全的SSL协议
(六)、okhttp
- 为我们android客户端支持HTTP2.0提供了途径
- 由著名的square团队开发,开源
(七)、okhttp优势:
- 支持SPDY、HTTP2.0,共享同一个socket来处理同一个服务器的所有请求
- 如果SPDY不可用,则通过连接池来减少请求延时
- 无缝支持GZIP来减少数据流量
- 支持同步、异步(异步使用较多)
- 缓存响应数据来减少重复的网络请求
- 可以从很多常用的连接问题中自动恢复
- 使用简单(api多,可扩展性好)
二、OkHttp
(一)、总体设计
上面是OKHttp总体设计图,主要是通过Diapatcher不断从RequestQueue中取出请求(Call),根据是否已缓存调用Cache或Network这两类数据获取接口之一,从内存缓存或是服务器取得请求的数据。该引擎有同步和异步请求,同步请求通过Call.execute()直接返回当前的Response,而异步请求会把当前的请求Call.enqueue添加(AsyncCall)到请求队列中,并通过回调(Callback)的方式来获取最后结果。
(二)、流程图
(三)、详细类关系图
由于整个设计类图比较大,所以本人将从核心入口client、cache、interceptor、网络配置、连接池、平台适配性…这些方面来逐一进行分析源代码的设计。下面是核心入口OkHttpClient的类设计图
三、封装
网络模块封装好处;
强大的可复用性;
与业务逻辑完全隔离;
强大的可扩展性;
封装思路讲解:
封装一个公共的OkHttpClient(超时时间等基本设置,get,post等请求方法);
封装一个通用的请求创建类CommonRequest;
封装一个通用的响应解析类JsonCommonRequest;