Okhttp3
以 post 为例,请求过程大致分四步:
- 构建 OKHTTPClient 对象
- 构建 Request 请求对象
- 购将 Call 对象
- 发起请求
Dispatcher
调度器。内部维护者最大请求数,每个主机最大请求数,还有三个最重要的队列,分别是 “将要执行的异步请求队列”、”正在执行的异步请求队列”、”正在执行的同步请求队列”。
getResponseWithInterceptorChain()
在这个方法中,将用户自定义的一些拦截器和默认的拦截器封装到一个 list 中,然后创建 RealInterceptorChain
对象并执行 proceed(originalRequest)
方法。在 proceed
中,会遍历调用拦截器列表中的拦截器,并调用每一个拦截器的 intercept 方法。
例如第一个拦截器 RetryAndFollowUpInterceptor
中的 intercept
方法,有 while 循环,在重连次数 followUpCount
超过 20 次的时候,停止重连。循环中,会执行 RealInterceptorChain.proceed()
,会去除下一个拦截器并执行 intercept 方法,以此种方法遍历拦截器列表中的拦截器。
最后一个拦截器是 CallServerInterceptor
。HttpCodec 这个接口用来编码 http 请求并解码 http 返回结果,也就是说真正的处理请求和结果在这个接口中,它有两个实现类分别是Http1Codec
和Http2Codec
分别对应Http/1.x和Http/2.x。