[Android网络相关-4] OKHttp 上层架构原理
前几篇文章重点讲解了Android底层HttpURLConnection的具体流程原理,本篇我们分析下OKHttp框架,我们上层使用的原理。
首先记住一个概念,OKHttp底层从缓存的连接池中挑选合适的连接对象RealConnection开始,后续的流程完全和HttpURLConnection底层流程一致,所以我们这里只需要分析下上层OKHttp是怎么处理的。
这样分析来看,OKHttp原理分为两部分。
- 上层OKHttp封装的框架,便于我们使用和调用
- 底层建立Socket收发数据,https,http协议,socket连接缓存等处理
关于第2点,可以直接参考之前的文章http请求原理。
下面来分析下第一点,上图。
OkHttp上层原理比较简单,毕竟就是为了让我们方便使用。这里主要定义了5个拦截器,一层层处理数据,直到最后一个拦截器给我们返回最后的Response。
- 这里的拦截器的作用
OkHttp上层使用责任链模式,内部定义了5个拦截器,同时开放了两个可以由调用者自定义的拦截器给我们使用。
注意:这里的5个拦截器虽然是依次执行,但是先前的拦截器会监听后续拦截器的执行结果,从而决定下一步的执行逻辑。
- 先说5个拦截器做什么事:
- 当我们通过OKHttpClient方法newCall的execute方法开始执行请求时候,首先会来到第一个拦截器。该拦截器主要监听请求结果的成功与否,如果失败,则根据需要来进行重试。同时这里会创建StreamAllocation对象,用于统一管理后续该请求的连接。
- BridgeInterceptor,该拦截器主要用于处理头部参数,将我们设置的header转换为底层框架可以识别的header,补充key和value,同时填充缺失的默认的haeder
- CacheInterceptor,这个主要用于数据缓存处理,到这里就会先判断缓存数据是否过期,没过期可以直击使用缓存数据。注意的是,有时候我们会通过etag方式来判断,那么这里也会监听后续流程返回的结果是否为304,如果是依然会返回缓存数据。
前3个拦截器实际上还没有到达实际的http请求,第4个拦截器才是真正去建立socket连接。
- ConnectInterceptor,数据连接拦截器,该拦截器会去连接池中查找已建立连接的RealConnection对象,或者没有缓存则新建立socket连接,验证tls,返回RealConnection对象
- CallServerInterceptor, 用于发送数据和接收数据,主要操作是BufferSink和BufferSource,获取到响应数据后返回。
存在两个可以自定义的拦截器入口:
- 第一个拦截器:程序最先运行,可以在里边对请求数据或者返回的数据做统一处理,拦截器执行时候,还没进行socket发送数据,或者在socket发送完数据,拿到反返回数据后进行操作处理。
- 第二个拦截器,在建立socket连接后,触发,但是此时还没有发送请求数据,可以在这里做一些验证,比如验证证书等。
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhgaicbb
系列文章
更多
同类精品
更多
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01 -
怎样阻止微信小程序自动打开
PHP中文网 06-13