图解okhttp-1-整体架构
来源:互联网 发布:9格拼图软件 编辑:程序博客网 时间:2024/05/22 06:19
Http库一定是两个核心,一个是IO核心,一个是http协议的封装,okhttp基于okio库封装了http协议并整合了分发器和线程池模型,是一个用起来很简单,api接口很容易理解的高效库。
首先看一段最简单的也是最常用的甚至是你可能仅仅只会用到这个的一段代码:
OkHttpClient client = new OkHttpClient();Request request = new Request.Builder().url("http://taobao.com").build(); Call call = client.newCall(request); call.enqueue(new Callback() { @Override public void onResponse(Call call, Response response) throws IOException { if (response.isSuccessful()) { // do something } } @Override public void onFailure(Call call, IOException e) { // do something } });
步奏:
1. 创建一个okhttpclient
2. 创建一个request
3. 通过okhttpclient把request封装成一个call
4. 把call丢进异步执行队列,并丢进去一个callback回调方法
5. 等着执行结束或者出错,在回调里做一些事情
整个流程很清晰,很容易理解,但我们还是想知道下面是怎么实现的,好奇心作祟,ok,我们来看看这个代码中的关键部分call.enqueue的调用链:
call是接口,实现类是realcall,realcall里面有okhttpclient的实例,而okhttpclient里面有dispacher的实例,所以实际上realcall会把callback放进dispatcher里,而dispatcher里会线程池和任务队列,线程会从任务队列里取任务执行,执行是通过interceptChain的里所有拦截器去遍历执行的,最后返回response
ok说了这么多可能还是有点懵,继续上图:
- dispatcher是一个分发器,里面的任务队列存着很多任务call,每次取出一个call去执行
- interceptorChain是一个拦截器链条,可以想象成一个链表,
- interceptor是拦截器,每个拦截器都会对获取的流做一些处理,例如重试拦截器,缓存拦截器等等
- 每个拦截器处理完后会把response传递给拦截器链的下一个拦截器,直到这个链表跑完最后返给chain,然后返给callback的回调方法,这个设计和netty一样,但其实现真心没有netty写的漂亮
至于IO核心被放到client里了,下次再分解。
阅读全文
0 0
- 图解okhttp-1-整体架构
- OkHttp 3.7源码分析(一)——整体架构
- OkHttp 3.7源码分析(一)——整体架构
- 架构之路1-整体架构说明
- 整体架构
- okHttp架构
- JVM整体结构图解
- OCP复习 - 管理(1-7) - 整体架构
- Linux电源管理(1)_整体架构
- Linux电源管理(1)_整体架构
- android多媒体分析(1)-整体架构
- Linux电源管理(1)_整体架构
- Linux电源管理(1)_整体架构
- Linux电源管理(1)_整体架构
- Mongo 整体架构介绍(1)-------分片集群
- [Tomcat剖析] 1 Tomcat整体架构
- Linux电源管理(1)_整体架构
- Spring 3.x MVC 入门1 -- 图解MVC整体流程
- memcache 设置 永不过期
- Spring data redis配置各个配置的解析
- 那些年搞不懂的高深术语——依赖倒置•控制反转•依赖注入•面向接口编程
- Css动画2D形变
- iOS-制作极光推送开发证书和生产证书
- 图解okhttp-1-整体架构
- Windows下,MySql使用binlog恢复表和数据初级教程
- JAVA调用cmd命令将shp数据存入postgis
- 虚拟机Oracle与客户端instantclient的连接以及PL/SQL Developer与instantclient.x64配置
- luaframework_ugui基础框架理解
- SVN和Git的优缺点
- 诗一首
- c++ 连接mysql数据库
- Java高级篇-10-静态代码块和静态方法