【安卓开发系列 -- APP 开源框架】网络请求框架 OKHTTP -- 整体框架

【1】OKHTTP 简介

OkHttp是一个适用于Android端处理网络请求的开源框架,由Square公司开发用于替代HttpUrlConnection和Apache HttpClient;
其特点如下,
1. 支持HTTPS/HTTP2/WebSocket
2. 内部维护任务队列线程池支持并发访问
3. 内部维护连接池,支持多路复用,减少连接创建开销
4. socket创建支持最佳路由
5. 提供拦截器链(InterceptorChain),实现request与response的分层处理;

【2】OKHTTP 整体框架结构图示

OkHttp的整体架构大致可以分为如下的层次


1. Interface(接口层),接受网络访问请求;

接口层接收用户的网络访问请求(同步请求/异步请求)并发起实际的网络访问;OkHttpClient是OkHttp框架的客户端,用户使用OkHttp进行各种设置,通过OkHttpClient发起各种网络请求;每个OkHttpClient内部都维护了属于自己的任务队列,连接池,Cache,拦截器等;
Call描述一个实际的访问请求,用户的每一个网络请求都是一个Call实例;Call本身只是一个接口,定义了Call的接口方法,实际执行过程中,OkHttp会为每一个请求创建一个RealCall,每一个RealCall内部有一个AsyncCall;
Dispatcher是OkHttp的任务队列,其内部维护了一个线程池,当有接收到一个Call时,Dispatcher负责在线程池中找到空闲的线程并执行其execute方法;

2. Protocol(协议层),处理协议逻辑;

Protocol层负责处理协议逻辑,OkHttp支持Http1/Http2/WebSocket协议;

3. Connection(连接层),管理网络连接,发送新的请求,接收服务器访问;

连接层负责处理网络连接,在连接层中有一个连接池,统一管理所有的Socket连接,当用户新发起一个网络请求时,OkHttp会首先从连接池中查找是否有符合要求的连接,如果有则直接通过该连接发送网络请求;否则新创建一个网络连接;

4. Cache(缓存层),管理本地缓存;

Cache层负责维护请求缓存,当用户的网络请求在本地已有符合要求的缓存时,OkHttp会直接从缓存中返回结果,从而节省网络开销;

5. I/O(I/O层),实际数据读写实现;

I/O层负责实际的数据读写,OkHttp其底层采用I/O库OKIO其I/O操作高效;

6. Inteceptor(拦截器层),拦截网络访问,插入拦截逻辑;

拦截器层提供了一个类AOP接口,方便用户可以切入到各个层面对网络访问进行拦截并执行相关逻辑;