• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

[Android网络相关-4] OKHttp 上层架构原理

武飞扬头像
MinQ
帮助1

    前几篇文章重点讲解了Android底层HttpURLConnection的具体流程原理,本篇我们分析下OKHttp框架,我们上层使用的原理。

    首先记住一个概念,OKHttp底层从缓存的连接池中挑选合适的连接对象RealConnection开始,后续的流程完全和HttpURLConnection底层流程一致,所以我们这里只需要分析下上层OKHttp是怎么处理的。

    这样分析来看,OKHttp原理分为两部分。

  1. 上层OKHttp封装的框架,便于我们使用和调用
  2. 底层建立Socket收发数据,https,http协议,socket连接缓存等处理

关于第2点,可以直接参考之前的文章http请求原理。

下面来分析下第一点,上图。

学新通

OkHttp上层原理比较简单,毕竟就是为了让我们方便使用。这里主要定义了5个拦截器,一层层处理数据,直到最后一个拦截器给我们返回最后的Response。

  • 这里的拦截器的作用

    OkHttp上层使用责任链模式,内部定义了5个拦截器,同时开放了两个可以由调用者自定义的拦截器给我们使用。

    注意:这里的5个拦截器虽然是依次执行,但是先前的拦截器会监听后续拦截器的执行结果,从而决定下一步的执行逻辑。

  • 先说5个拦截器做什么事:
  1. 当我们通过OKHttpClient方法newCall的execute方法开始执行请求时候,首先会来到第一个拦截器。该拦截器主要监听请求结果的成功与否,如果失败,则根据需要来进行重试。同时这里会创建StreamAllocation对象,用于统一管理后续该请求的连接。
  2. BridgeInterceptor,该拦截器主要用于处理头部参数,将我们设置的header转换为底层框架可以识别的header,补充key和value,同时填充缺失的默认的haeder
  3. CacheInterceptor,这个主要用于数据缓存处理,到这里就会先判断缓存数据是否过期,没过期可以直击使用缓存数据。注意的是,有时候我们会通过etag方式来判断,那么这里也会监听后续流程返回的结果是否为304,如果是依然会返回缓存数据。

前3个拦截器实际上还没有到达实际的http请求,第4个拦截器才是真正去建立socket连接。

  1. ConnectInterceptor,数据连接拦截器,该拦截器会去连接池中查找已建立连接的RealConnection对象,或者没有缓存则新建立socket连接,验证tls,返回RealConnection对象
  2. CallServerInterceptor, 用于发送数据和接收数据,主要操作是BufferSink和BufferSource,获取到响应数据后返回。

存在两个可以自定义的拦截器入口:

  • 第一个拦截器:程序最先运行,可以在里边对请求数据或者返回的数据做统一处理,拦截器执行时候,还没进行socket发送数据,或者在socket发送完数据,拿到反返回数据后进行操作处理。
  • 第二个拦截器,在建立socket连接后,触发,但是此时还没有发送请求数据,可以在这里做一些验证,比如验证证书等。

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhgaicbb
系列文章
更多 icon
同类精品
更多 icon
继续加载