Okhttp 浅析

Okhttp 浅析_第1张图片

Okhttp 浅析_第2张图片

安全的连接

OkHttpClient:

Okhttp 浅析_第3张图片

OkHttpClient:

Okhttp 浅析_第4张图片

Okhttp 浅析_第5张图片

1.线程调度

2.连接池,有则复用,没有就创建

3.interceptor

4.interceptor

5.监听工厂

6.是否失败重试

7.自动修正访问,如果没有权限或认证

Okhttp 浅析_第6张图片

8是否重定向  followRedirects

9.协议切换时候是否继续重定向

10.Cookie jar 容器 默认返回空的

Okhttp 浅析_第7张图片

11.本地缓存

12 dns 域名解析为dns地址

Okhttp 浅析_第8张图片

通过原生方式,根据域名获取DNS/IP地址

13.代理服务器

Okhttp 浅析_第9张图片

直连,http,Socket

14.代理的select

Okhttp 浅析_第10张图片

默认直连

15.代理授权

16.sslsocket工厂

17.x509 证书验证器,验证合法性

18.连接标准 比如版本 http 1.1 2.0

Okhttp 浅析_第11张图片

Okhttp 浅析_第12张图片

Okhttp 浅析_第13张图片

严格         -       一般              -        基本无限制

不加密传输

19.支持的协议

Okhttp 浅析_第14张图片

Okhttp 浅析_第15张图片

不加密的HTTP2

20 21 22:

证书验证相关

Okhttp 浅析_第16张图片

Okhttp 浅析_第17张图片

如果配置错误则会打印报错

多证书

Okhttp 浅析_第18张图片

23. call连接超时

24. 网络连接超时

25.读取超时

26.写入超时

27.心跳频率  websocket / http 2

enqueue 是一个接口 Call

Okhttp 浅析_第19张图片

Okhttp 浅析_第20张图片

Okhttp 浅析_第21张图片

Okhttp 浅析_第22张图片

client 通用配置等参数

Request 请求相关参数,初始的request

forwebsocket websocket 服务器主动发消息,推送数据,通过http连接

RealCall   Call接口实现类

Okhttp 浅析_第23张图片

1 跟踪程序的错误

2 监听所有事件 比如连接 断开 等

enqueue: 执行client.dispatcher.enqueue(AsyncCall xxx) 

Okhttp 浅析_第24张图片

dispatcher 线程调度用的Executor

Okhttp 浅析_第25张图片

Okhttp 浅析_第26张图片

enqueue:

Okhttp 浅析_第27张图片

Okhttp 浅析_第28张图片

尝试找到有没有当前url的主机

传入AsyncCall 添加到队列,双向队列,准备还未执行的操作

执行已经准备好的Call

Okhttp 浅析_第29张图片

取出所有的call 并且取出的值小于设定的值,添加到正在执行的call

遍历执行 executeOn,则执行runnable

Okhttp 浅析_第30张图片

Okhttp 浅析_第31张图片

executee()  = runnable,发生了线程切换

Okhttp 浅析_第32张图片

run

Okhttp 浅析_第33张图片

获取相应 getResponseWithInterceptorChain ,然后传给回调

Okhttp 浅析_第34张图片

execute: 同步执行, 直接调用getResponseWithInterceptorChain

Okhttp 浅析_第35张图片

getResponseWithInterceptorChain: 

将各种拦截器添加到集合中

Okhttp 浅析_第36张图片

创建一个拦截器的chain

Okhttp 浅析_第37张图片

链式工作

每一个都有前置后置任务

Okhttp 浅析_第38张图片

1 第一个拦截器 ,连接错误等进行重置连接

Okhttp 浅析_第39张图片

请求,然后重试

Okhttp 浅析_第40张图片

判断是哪种错误

Okhttp 浅析_第41张图片

找到一个可用连接

Okhttp 浅析_第42张图片

如果是重定向等,继续重试

Okhttp 浅析_第43张图片

成功则返回结果,否则继续重试

Okhttp 浅析_第44张图片

Okhttp 浅析_第45张图片

复制一份执行,然后调用下一个链条

2:将已经准备好的连接进行发送和过滤判断

将参数 content-length等进行填充

Okhttp 浅析_第46张图片

自动进行压缩 / 解压缩 gzip

3.缓存拦截器

Okhttp 浅析_第47张图片

有缓存直接返回

Okhttp 浅析_第48张图片

缓存类型:

Okhttp 浅析_第49张图片

没有则进行缓存

Okhttp 浅析_第50张图片

4.连接拦截器

Okhttp 浅析_第51张图片

init

Okhttp 浅析_第52张图片

coedc:编码/解码器,然后拼接成Exchange

找到可用健康的连接

Okhttp 浅析_第53张图片

先拿到可用连接

Okhttp 浅析_第54张图片

然后判断状态,最多5种方式拿到

        取消掉的

        有没有已经建立

  

          结果为空则执行,把call放到池里的连接

Okhttp 浅析_第55张图片

        多复用,判断是否可用

        Okhttp 浅析_第56张图片

        拿到一个连接

Okhttp 浅析_第57张图片

        判断有没有超限,判断是否是同一个主机TCP端口以及加密方式和代理等配置是否相同,

        Okhttp 浅析_第58张图片

        判断代理

Okhttp 浅析_第59张图片

        判断 http2Okhttp 浅析_第60张图片

        判断证书

        如果已经拿到连接,直接返回,否则再进行重试

        复用已经使用过且相等地址端口证书的连接

Okhttp 浅析_第61张图片

         5次连接: 

                1有连接直接复用,

                2拿不到则在连接池取一个不多重复用的连接,

                3在拿一个多复用连接,

                4自己创建一个连接,

                5重新取池里多重复用的连接

5.往服务器发送数据拦截器

发请求,读相应

Okhttp 浅析_第62张图片

运行

Okhttp 浅析_第63张图片

Okhttp 浅析_第64张图片

读响应

Okhttp 浅析_第65张图片

 然后反式调用上一个拦截器

Okhttp 浅析_第66张图片

你可能感兴趣的:(okhttp)