快捷搜索:  汽车  科技

简述okhttp网络架构的基本原理:图解okhttp整体架构

简述okhttp网络架构的基本原理:图解okhttp整体架构if (response.isSuccessful()) { public void onResponse(Call call Response response) throws IOException { Call call = client.newCall(request); call.enqueue(new callback() { @Override

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
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

步奏:

1. 创建一个okhttpclient


call是接口,实现类是realcall,realcall里面有okhttpclient的实例,而okhttpclient里面有dispacher的实例,所以实际上realcall会把callback放进dispatcher里,而dispatcher里会线程池和任务队列,线程会从任务队列里取任务执行,执行是通过interceptChain的里所有拦截器去遍历执行的,最后返回response

ok说了这么多可能还是有点懵,继续上图:

简述okhttp网络架构的基本原理:图解okhttp整体架构(1)


  • dispatcher是一个分发器,里面的任务队列存着很多任务call,每次取出一个call去执行
  • interceptorChain是一个拦截器链条,可以想象成一个链表,
  • interceptor是拦截器,每个拦截器都会对获取的流做一些处理,例如重试拦截器,缓存拦截器等等
  • 每个拦截器处理完后会把response传递给拦截器链的下一个拦截器,直到这个链表跑完最后返给chain,然后返给callback的回调方法,这个设计和netty一样,但其实现真心没有netty写的漂亮

至于IO核心被放到client里了,下次再分解。

猜您喜欢: