本文主要分析OkHttp处理Http网络请求的整体流程。

下图是Http最简单最核心的示意图,HTTP就是从客户端发送Http Request(请求)给服务器,并接收从服务器返回的Http Response(响应)。

OkHttp.png

而OkHttp就是协助客户端(主要是安卓)执行Http协议,发Http请求,收Http响应。但是Http协议远比这要复杂得多。

每张图对比之前的图,增加的部分用

从拦截器Interceptor开始。

拦截器定义:观察,修改以及可能短路的请求输出和响应请求的回来。通常情况下拦截器用来添加,移除或者转换请求或者回应的头部信息。

OkHttp3.png

整个拦截器链包括:应用拦截器,OkHttp核心,网络拦截器。其中OkHttp核心包括:

1、RetryAndFollowUpInterceptor: 请求重试拦截器

2、BridgeInterceptor:桥接拦截器

3、CacheInterceptor:缓存拦截器

4、ConnectInterceptor:连接拦截器

这4个部分是不可修改的。而

1、ApplicationInterceptor: 应用拦截器

2、NetworkInterceptor:网络拦截器

是可以配置的。

方向上:

Request是从应用拦截器走到网络拦截器。

Response是从网络拦截器走到应用拦截器。

谈谈调度器Dispatcher

调度器使Http的收发支持高并发。同步调度直接进入拦截器,异步调度则进入调度器,等待分配。调度器内含一个线程池。

OkHttp4.png

考虑缓存服务器

移动端的应用,所有请求速度越快,用户体验越完美。所以缓存在移动端对于用户体验影响极大。拦截器将Request发出是先发送给本地缓存服务器,若本地缓存服务器拥有有效的缓存,则直接返回Reponse;若没有,才向服务器发Request。

OkHttp5.png

OkHttp框架常用套路

平时使用OkHttp框架都是用下面的套路:

// 同步请求

OkHttpClient client = new OkHttpClient();

Request request = new Request.Builder()

.url("***")

.build();

Response response = client.newCall(request).execute();

// ==========================================================

// 异步请求

OkHttpClient client = new OkHttpClient();

Request request = new Request.Builder()

.url("***")

.build();

Response response = client.newCall(request).enqueue(new Callback() {

@Override public void onFailure(Request request, Throwable throwable) {

}

@Override public void onResponse(Response response) throws IOException {

}

});

可以看出来涉及核心类明显的有:OkHttpClient、Request 、Response和Call,隐含在其中的有Dispatcher、Interceptor和Cache。当然,整体流程还得细节到HttpCodec、Stream、Router、Connection等。最后我们在之前得出流程图中补充Call类。

Call类

先谈谈Call类的作用。Call是已准备好要执行的请求的接口,RealCall和AsynCall是Call的具体实现。Call类让包装的的同/异步的get/post指令的Request,拥有了动作。Call和Request是同一件事物的内容与动作的分离。内容会变;动作就是同/异步和get/post指令的排列组合,不变;符合程序设计变与不变分离的原则。

OkHttp6.png

重要接口和实现类总结

BridgeInterceptor implements Interceptor

CacheInterceptor implements Interceptor

CallServerInterceptor implements Interceptor

ConnectInterceptor implements Interceptor

RetryAndFollowUpInterceptor implements Interceptor

RealInterceptorChain implements Interceptor.Chain

OkHttpClient implements Call.Factory, WebSocketCall.Factory

RealCall implements Call

RealConnection implements Connection

RealWebSocket implements WebSocket

RealWebSocketCall implements WebSocketCall

框架源码阅读经验之谈

第一步:从框架的使用入手,了解框架源码主干流程

第二步:将框架从接口和抽象类开始解剖,而后辅以类图加以组合

第三部:抠细节,主要关注功能和设计模式

okhttp 服务器性能,OkHttp逐步深入相关推荐

  1. okhttp 服务器性能,okHttp小结

    by hzwusibo  20190504 常见问题一:简述一下OkHttp OkHttp已被谷歌加入到Android的源码中.目前比较流行的Retrofit也是默认使用OkHttp的. 支持http ...

  2. 【转】linux服务器性能查看

    转载自https://blog.csdn.net/achenyuan/article/details/78974729 1.1 cpu性能查看 1.查看物理cpu个数: cat /proc/cpuin ...

  3. 提升tomcat服务器性能的七条经验

    http://passover.blog.51cto.com/2431658/732629 在线上环境中我们是采用了tomcat作为Web服务器,它的处理性能直接关系到用户体验,在平时的工作和学习中, ...

  4. windows服务器性能分析方法小结,Windows服务器性能分析方法小结

    Windows服务器性能各种指标的分析 事情的起因是BOSS/CRM系统的扩容.我所要做得,仅仅是写一份CRM Windows服务器的性能分析,不过这足以让我一筹莫展了,毕竟当时对主机性能分析的认识, ...

  5. 用Spotlight on windows 实时监控Windows服务器性能

    用Spotlight on windows 实时监控Windows服务器性能 2010-02-03 10:30:25|  分类: else |  标签: |字号大中小 订阅 用Spotlight on ...

  6. TypePerf收集服务器性能

    TypePerf.exe这个命令行工具可以收集服务器性能数据 --1.查找和数据库JinRiDomesticOrder相关的性能参数 TYPEPERF -qx "SQLServer:Data ...

  7. 【OkHttp】OkHttp 源码分析 ( 网络框架封装 | OkHttp 4 迁移 | OkHttp 建造者模式 )

    OkHttp 系列文章目录 [OkHttp]OkHttp 简介 ( OkHttp 框架特性 | Http 版本简介 ) [OkHttp]Android 项目导入 OkHttp ( 配置依赖 | 配置 ...

  8. Web服务器性能压力测试工具http_load、webbench、ab、Siege使用教程

    Web服务器性能压力测试工具http_load.webbench.ab.Siege使用教程 作者: feng 日期: 2012/07/25 发表评论 (0) 查看评论 一.http_load 程序非常 ...

  9. 主要用于收集数据库服务器性能参数,数据库-布布扣-bubuko.com

    一系统数据库:  information_schema: 虚拟库, 不占磁盘空间, 存储数据库启动后的一些参数, 如用户表信息, 列信息/权限信息/字符信息等等 performance_schema: ...

最新文章

  1. ICCV2021|首届城市规模点云语义理解挑战赛启动了
  2. 因子分析累计方差贡献率要在多少_R语言进阶之因子分析
  3. 《Linux命令行与shell脚本编程大全 第3版》Shell脚本编程基础---43
  4. opencv 星空_opencv各种小例子
  5. java 制作小游戏_如何用java制作小游戏
  6. AVL树双旋转+图解
  7. mmdetection工程训练文件配置小结
  8. MySQL-->索引-->如何创建索引,创建原则
  9. 【论文】Awesome Relation Extraction Paper(关系抽取)(PART III)
  10. 中小学生应不应该学英语?
  11. 关于URL编码/javascript/js url 编码
  12. 【使用R语言两行语句将搜狗词库转为csv格式】
  13. 1bit等于多少字节,换算方法??
  14. springMVC 面试题整理
  15. 奔向太空,我们是认真的!国产操作系统飞天记。
  16. PHP微信防止token过期,微信调用接口,防止Access_token过期的方法
  17. 爬取东方求闻史记和东方求闻口授图片
  18. Python: Command Line Scripts
  19. 2019年12月 视觉顶会论文收集
  20. 关于计算机知识的内容500字,介绍电脑的作文500字

热门文章

  1. Access VBA 代码记录
  2. Windows7主题包
  3. 飞秋无法顺利通信时的解决办法--设置成相同的网段
  4. 粉末冶金、功能陶瓷等新材料的高温热成型设备
  5. ylmf3.0 分配修改登录root用户管理权限的方法
  6. 认识c语言程序,C语言基础-认识C语言
  7. java计算机毕业设计社区管理与服务源程序+mysql+系统+lw文档+远程调试
  8. ac ap方案 华为_华为AC+AP无线配置方法
  9. Win8.1 64位操作系统 安装itunes出错问题解决办法
  10. Android Transformations分析