整个OkHttp功能的实现就在这五个默认的拦截器中,所以先理解拦截器模式的工作机制是先决条件。这五个拦截 器分别为: 重试拦截器、桥接拦截器、缓存拦截器、连接拦截器、请求服务拦截器。每一个拦截器负责的工作不一 样,就好像工厂流水线,最终经过这五道工序,就完成了最终的产品。
但是与流水线不同的是,OkHttp中的拦截器每次发起请求都会在交给下一个拦截器之前干一些事情,在获得了结 果之后又干一些事情。整个过程在请求向是顺序的,而响应向则是逆序
当用户发起一个请求后,会由任务分发起 Dispatcher 将请求包装并交给重试拦截器处理
1、重试拦截器在交出(交给下一个拦截器)之前,负责判断用户是否取消了请求;在获得了结果之后,会根据响应码
判断是否需要重定向,如果满足条件那么就会重启执行所有拦截器。
2、桥接拦截器在交出之前,负责将HTTP协议必备的请求头加入其中(如:Host)并添加一些默认的行为(如:GZIP 压缩);在获得了结果后,调用保存cookie接口并解析GZIP数据。
3、缓存拦截器顾名思义,交出之前读取并判断是否使用缓存;获得结果后判断是否缓存。
4、连接拦截器在交出之前,负责找到或者新建一个连接,并获得对应的socket流;在获得结果后不进行额外的处
理。
5、请求服务器拦截器进行真正的与服务器的通信,向服务器发送数据,解析读取的响应数据。
在经过了这一系列的流程后,就完成了一次HTTP请求!
Okhttp 有哪些优势?
1.支持 http2,对一台机器的所有请求共享同一个 Socket
2.内置连接池,支持连接复用,减少延迟
3.支持透明的 gzip 压缩响应体
4.响应缓存可以完全避免网络重复请求
5.请求失败时自动重试主机的其他 ip,自动重定向
6.丰富的 API,可扩展性好
Okhttp 运用了哪些设计模式?
Okhttp 运用了六种设计模式:
1.Builder模式(OkhttpClient,Request 等各种对象的创建)
2.工厂模式(在 Call 接口中,有一个内部工厂 Factory 接口。)
3.单例模式(Platform 类,已经使用 Okhttp 时使用单例)
4.策略模式(在 CacheInterceptor 中,在响应数据的选择中使用了策略模式,选择缓存数据还是选择网络访问。)
5.责任链模式(拦截器的链式调用)
6.享元模式(Dispatcher 的线程池中,不限量的线程池实现了对象复用)
网友评论