OKHttp实现原理

用通俗易懂的话解释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

CacheInterceptor使用了DiskLruCache

ConnectInterceptor

CallServerInterceptor




转载于:https://juejin.im/post/5b617a3be51d45172831febc

你可能感兴趣的:(OKHttp实现原理)