OKHttp 源码剖析完整流程图 ---- 林冠宏
2017-10-27 17:39:23 0 举报
OKHttp 源码剖析完整流程图 ---- 林冠宏
作者其他创作
大纲/内容
读取 headerreadResponseHeaders
Protocol
sendRequest
running 队列满?
HttpEngine
核心类:
OkHttpClient
start connect
ConnectPool
Call 早期版本还不是接口RealCall
Dispatcher无并发上限类线程池总控,内置 SyncBlock 同步阻塞队列存 runnable 对 Call 进行 pull & take
Cache strategy 缓存有效判断策略
包装 socket 连接时用到的 address 对象
ConnectPool 回收 connect
Y
Connect
cache hit
如果存在有 connect ?
B
Search cache基于 DisLruCache 的硬盘缓存
核心也是最复杂的部分。进行 socket 连接,握手 并 获取输入输出流对象
Is Async ?
Cache
如果自定义一个拦截器,添加进去,那么可以自定义一些功能,在请求结束后。例如实现进度监听
runningAsyncCalls异步运行中队列
执行流程:
enqueue
Call(RealCall)
execute
过期等失效?
其中还有一些其他的操作,例如 header 的字段校验等
SocketFactory ; SSLSocketFactory ; HostnameVerifier ; CertificatePinner ; Authenticator ; protocols;connectionSpecs;proxySelector;
Success ?
Chain 接口
executedCalls同步队列
readResponse
ConnectionPool 链接池获取 connection
Response
A
asyncReadyCalls异步的等待队列
Request
getResponseWidthInterceptorChain装饰者模式装饰 interceptor 拦截者,包装完后运行 getResponse 进入下一阶段。运行于 Call 实体类的 execute 函数中
读取 bodyopenResponseBody
检验部分 request headers & init HttpEngine
Dispatcher
前序:OKHttp 内部代码使用了很多的设计模式,其中比较重要的是建造者builder 和 装饰者 Decorator 设计模式----作者:林冠宏
new Connection
newCall
包装 socket 连接时用到的 routerSelecter 对象
Interceptor 接口
包装 Response & return
类 A 持有 B 的引用;接口 A 继承于 B 接口
InternalCache 接口
0 条评论
回复 删除
下一页