Okhttp 浅析

安全的连接

OkHttpClient:

OkHttpClient:

1.线程调度

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

3.interceptor

4.interceptor

5.监听工厂

6.是否失败重试

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

8是否重定向  followRedirects

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

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

11.本地缓存

12 dns 域名解析为dns地址

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

13.代理服务器

直连,http,Socket

14.代理的select

默认直连

15.代理授权

16.sslsocket工厂

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

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

严格         -       一般              -        基本无限制

不加密传输

19.支持的协议

不加密的HTTP2

20 21 22:

证书验证相关

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

多证书

23. call连接超时

24. 网络连接超时

25.读取超时

26.写入超时

27.心跳频率  websocket / http 2

enqueue 是一个接口 Call

client 通用配置等参数

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

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

RealCall   Call接口实现类

1 跟踪程序的错误

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

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

dispatcher 线程调度用的Executor

enqueue:

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

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

执行已经准备好的Call

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

遍历执行 executeOn,则执行runnable

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

run

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

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

getResponseWithInterceptorChain: 

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

创建一个拦截器的chain

链式工作

每一个都有前置后置任务

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

请求,然后重试

判断是哪种错误

找到一个可用连接

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

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

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

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

将参数 content-length等进行填充

自动进行压缩 / 解压缩 gzip

3.缓存拦截器

有缓存直接返回

缓存类型:

没有则进行缓存

4.连接拦截器

init

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

找到可用健康的连接

先拿到可用连接

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

        取消掉的

        有没有已经建立

  

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

        多复用,判断是否可用

        

        拿到一个连接

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

       

        判断代理

        判断 http2

        判断证书

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

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

         5次连接: 

                1有连接直接复用,

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

                3在拿一个多复用连接,

                4自己创建一个连接,

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

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

发请求,读相应

运行

读响应

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

  • 32
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值