学习总结,仅供自己参考,如有不对欢迎指正
一个完整的异步请求:
OkHttpClient,首先创建一个OkHttpClient,
newCall,调用newCall创建一个RealCall,
RealCall,在RealCall会调用其中一个enqueue方法,
enqueue,里面会调用Dispatcher的 enqueue方法 ,
Dispatcher的 enqueue方法,然后会去调用promoteAndExcute方法,
promoteAndExcute,调用executeOn方法去执行对应的call,
executeOn,实际通过ExcutorService来切换线程去执行具体的call,
getResponseWithInterceptorChain(),这里是真正执行一些列网络请求操作的地方
最终拿到对应的Respone。
OkHttp中的重要概念
1.Dispatcher:线程调度器,用来做线程切换的,内部实现是通过ExcutorService多线程的管理工具来实现的。
maxRequests = 64: 最大并发请求数为64
maxRequestsPerHost = 5: 每个主机最大请求数为5
2.RealConnection
对Socket 、I/O 流以及一些协议的封装,包括HTTPS验证、TCP连接等
3.RealConnectionPool:连接池,类似于线程池,对RealConnection进行统一的管理。
4.ReadyAsycCalls:准备好了但是还没执行的请求
5.eventListenterFactory:各种状态的回调,比如:成功创建连接了、获取数据了等
6.ExchangeCodec 是编码解码器。负责对 Request 编码及解码 Response。其中 Connection 负责建立连接,ExchangeCodec 负责收发数据。
7.ExchangeCodec 有两个接口实现类:
Http1ExchangeCodec 和 Http2ExchangeCodec
8.Exchange:每一个Exchange会包括一个ExchangeCodec编码解码器负责收发数据。每一个request和Exchange是一一对应的。
9.Transmitter:发射器,OkHttp的应用程序和网络层之间的桥梁。每一个realcall都对应一个Transmitter。
OkHttp的拦截器
拦截器Interceptor是基于责任链模型的,每一个Interceptor都是责任链的节点
在 RealCall 中会按照顺序添加如下几个默认的 Interceptor 到责任链中用来完成基本功能:
RetryAndFollowUpInterceptor:负责失败重试及重定向
BridgeInterceptor:处理网络 Header、Cookie、gzip 等
CacheInterceptor:管理缓存(返回NetworkResponse之前,检查是否存在缓存,存在就直接返回了)
ConnectInterceptor:连接服务器.
首先会创建一个newExchange(用来做Http交互的),其中会包括ExchangeCodec编码解码器
CallServerInterceptor : 数据发送/接收 。到这里,准备工作已经完成,将request请求数据发送给服务端,并获取返回数据写入到response,
网友评论