美文网首页
OkHttp源码简析

OkHttp源码简析

作者: 浩仔_Boy | 来源:发表于2020-12-07 19:33 被阅读0次

    学习总结,仅供自己参考,如有不对欢迎指正

    一个完整的异步请求:

    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,

    相关文章

      网友评论

          本文标题:OkHttp源码简析

          本文链接:https://www.haomeiwen.com/subject/uubtgktx.html