最终总结
realcall.execute
1.dispatcher.execute入队列
2.get…
3.finish出队列 提振 执行
realcall.enqueue=dispatcher.enqueue(Async)
1.get
2.回调
3.finish出队列 提振 执行
拦截器
retryfollw
失败重试
重定向,直接发起新的请求(条件允许,复用连接)
Bridge
翻译官
contentLength,编码
压缩,解压
cookie
header,如User-Agent,Host,Keep-alive
cache
找
返回内容变了,更新
缓存删除
也可以自己指定目录,缓存大小,逻辑
Cache,采用disk lru。删除规则是请求次数,查找到匹配缓存的次数等。本地会维护两种状态,DIRTY和CLEAN。创建和更新都基于DIRTY,实现了读写的分离。每种状态都对应两种数据:1.meta2.内容
CacheStrategy Factorgy根据request生成缓存策略,以缓存策略为依据做出反应。
connect
HttpCodec,用okio封装了Socket。
创建原理:连接池中找到一个可用的RealConnection,用它的BufferedSource 和 BufferedSink创建HttpCodec对象。
多路复用:老HTTP要频繁挥手握手,新的保持连接了,而且进行了压缩,还可以分帧。
通过计数+标记清理的机制来管理ConnectionPool ,使得无用连接可以被会回收,并保持多个健康的keep-alive连接。
callserver
真正门户
requestheader
requestbody
responsebody
responsebody,再上面构造的response对象的基础上构造一个新的Response对象
核心工作都由 HttpCodec 对象完成
body
1.只能消费1次
2.需要close
cache和connection pool的原理细节没有深入分析