用通俗易懂的话解释OKHttp实现原理:
先Build OkHttpClient 再 Build Request Call call = OkHttpClient.newCall(request),
call对应着同步和异步两种方法。
OkHttpClient算是执行调用请求Call的工厂,这个工厂将会被用来发送Http请求和读取他们的返回,每一个Client都有自己的一个连接池connection pool和线程池thread pools。
Call实际上是被放到了Dispatcher中,Dispatcher中有同步和异步两种队列,使用ExecutorService来执行。
Call 是个接口,实现在RealCall中,RealCall实现了同步和异步两种方法都是调用的Dispatcher中的同步和异步方法。每个Call只能被执行一次。
Response 是通过 getResponseWithInterceptorChain()返回的。
Interceptor是OKHttp最核心的东西,它把实际的网络请求、缓存 、透明压缩等功能都统一了起来。每个功能都是一个Interceptor,他们形成一个Interceptor.Chain。(责任链模式)
HttpStream这个接口的实现类,Http1xStream和Http2xStream,分别对应Http1.1协议和Http/2和SPDY协议,通过writeRequestHeaders
开始写入请求头到服务器,createRequestBody
用于获取写入流来写入请求体。readResponseHeaders
用于读取响应头,openResponseBody
用于打开一个响应体。
StreamAllocation
流分配器,该类用于协调连接、流和请求三者之间的关系。通过调用newStream
可以获取一个HttpStream实现
RetryAndFollowUpInterceptor
创建StreamAllocation,以此传入到后续的Interceptor中
处理重定向的Http响应
BridgeInterceptor
处理Header和Cookie