Android之网络请求4————OkHttp源码1:框架

一.目录

文章目录

  • Android之网络请求4————OkHttp源码1:框架
      • 一.目录
      • 二.目的
      • 三.总体框架
      • 四.每层的含义
        • 1. Interface——接口层:
        • 2.Protocol——协议层:处理协议逻辑
        • 3.Connection——连接层:管理网络连接,发送新的请求,接收服务器访问
        • 4.Cache——缓存层:管理本地缓存
        • 5.Inteceptor——拦截器层:拦截网络访问,插入拦截逻辑
      • 五. 参考资料
      • 六.文章索引

二.目的

本次阅读源码的目的有以下目的:

  1. 发生请求的过程
  2. 接收响应的过程
  3. 网络操作的实现
  4. 缓存的实现
  5. 多路复用的实现

在接下来的几篇文章中,结合源码和多篇优先的文章一同分析这些问题。

关于OKHttp的使用可以看前面的文章

三.总体框架

上图是OkHttp的总体架构,大致可以分为以下几层:

  1. Interface——接口层:接受网络访问请求
  2. Protocol——协议层:处理协议逻辑
  3. Connection——连接层:管理网络连接,发送新的请求,接收服务器访问
  4. Cache——缓存层:管理本地缓存
  5. I/O——I/O层:实际数据读写实现
  6. Inteceptor——拦截器层:拦截网络访问,插入拦截逻辑

四.每层的含义

1. Interface——接口层:

接口层接收用户的网络访问请求(同步/异步),发起实际的网络访问。OKHttpClient是OkHttp框架的客户端,更确切的说是一个用户面板。用户使用OkHttp进行各种设置,发起各种网络请求都是通过OkHttpClient完成的。每个OkHttpClient内部都维护了属于自己的任务队列,连接池,Cache,拦截器等,所以在使用OkHttp作为网络框架时应该全局共享一个OkHttpClient实例。

Call描述了一个实际的访问请求,用户的每一个网络请求都是一个Call实例,Call本身是一个接口,定义了Call的接口方法,在实际执行过程中,OkHttp会为每一个请求创建一个RealCall,即Call的实现类。

Dispatcher是OkHttp的任务队列,其内部维护了一个线程池,当有接收到一个Call时,Dispatcher负责在线程池中找到空闲的线程并执行其execute方法。

上面这三个类会在下一篇博客中详细介绍

2.Protocol——协议层:处理协议逻辑

Protocol层负责处理协议逻辑,OkHttp支持Http1/Http2/WebSocket协议,并在3.7版本中放弃了对Spdy协议,鼓励开发者使用Http/2。

3.Connection——连接层:管理网络连接,发送新的请求,接收服务器访问

连接层顾名思义就是负责网络连接,在连接层中有一个连接池,统一管理所有的Scoke连接,当用户发起一个新的网络请求是,OKHttp会在连接池找是否有符合要求的连接,如果有则直接通过该连接发送网络请求;否则新创建一个网络连接。

RealConnection描述一个物理Socket连接,连接池中维护多个RealConnection实例,由于Http/2支持多路复用,一个RealConnection,所以OKHttp又引入了StreamAllocation来描述一个实际的网络请求开销(从逻辑上一个Stream对应一个Call,但在实际网络请求过程中一个Call常常涉及到多次请求。如重定向,Authenticate等场景。所以准确地说,一个Stream对应一次请求,而一个Call对应一组有逻辑关联的Stream),一个RealConnection对应一个或多个StreamAllocation,所以StreamAllocation,是以StreamAllocation可以看做是RealConenction的计数器,当RealConnection的引用计数变为0,且长时间没有被其他请求重新占用就将被释放。

这一部分也详见之后的文章

4.Cache——缓存层:管理本地缓存

Cache层负责维护请求缓存,当用户的网络请求在本地已有符合要求的缓存时,OKHttp会直接从缓存中返回结果,从而节省 网络开销。

这一部分也详见之后的文章

5.Inteceptor——拦截器层:拦截网络访问,插入拦截逻辑

拦截器层提供了一个类AOP接口,方便用户可以切入到各个层面对网络访问进行拦截并执行相关逻辑。在下一篇博客中,这个也在之后会想讲。

五. 参考资料

OkHttp 3.7源码分析(一)——整体架构

六.文章索引

Android之网络请求1————HTTP协议
Android之网络请求2————OkHttp的基本使用
Android之网络请求3————OkHttp的拦截器和封装
Android之网络请求4————OkHttp源码1:框架
Android之网络请求5————OkHttp源码2:发送请求
Android之网络请求6————OkHttp源码3:拦截器链
Android之网络请求7————OkHttp源码4:网络操作
Android之网络请求8————OkHttp源码5:缓存相关
Android之网络请求9————Retrofit的简单使用
Android之网络请求10————Retrofit的进阶使用
Android之网络请求11————Retrofit的源码分析

更多相关文章

  1. Android小心有坑之网络状态监听
  2. android 7种网络连接方式《IT蓝豹》
  3. Android(安卓)MVP应用
  4. Android(安卓)下使用 JSON 实现 HTTP 请求,外加几个示例!
  5. Android操作HTTP实现与服务器通信
  6. Android中WebView拦截替换网络请求数据
  7. android 7种网络连接方式--IT蓝豹
  8. Android单元测试那些事儿(一)
  9. Android网络编程之WebKit应用

随机推荐

  1. Android(安卓)init.rc文件解析过程分析
  2. Android实例剖析笔记(二)
  3. android控件的对齐方式转讲
  4. android音频口通信(二)——2FSK信号解调
  5. Android(安卓)启动过程
  6. android 开发布局之RelativeLayout
  7. android中怎么调整字体的间距和行间距
  8. Android四大视图动画图文详解
  9. 浅谈android的selector背景选择器
  10. Eclipse开发Android的配置(包括ADT安装,SDK