重庆平台网站建设工作,超简单手工小制作,微信商户平台开发,常用网站设置OkHttp原理和机制讲解
本文链接#xff1a;https://blog.csdn.net/feather_wch/article/details/131767285
1、OkHttp的原理和机制包括哪些部分#xff1f;
设计模式的运用#xff1a;建造者模式、外观模式、责任链模式整体流程分发器(调度机制)TCP链接复用(复用机制)拦截…OkHttp原理和机制讲解
本文链接https://blog.csdn.net/feather_wch/article/details/131767285
1、OkHttp的原理和机制包括哪些部分
设计模式的运用建造者模式、外观模式、责任链模式整体流程分发器(调度机制)TCP链接复用(复用机制)拦截器流程缓存机制
2、Http 1.1和Http2.0的区别
1.1 keep-alive、串行、有序 - 有序源于基于文本必须有序2.0 头部压缩(更小)ServerPush(服务器主动Push)、多路复用、并行、源于采用二进制数据帧(存储了顺序标志)
3、OkHttp请求整体流程
flowchart TDOkHttpClient --newCall 参数Request-- RealCall --execute/enqueue-- Dispatcher -- Intercepter -- Response4、分发器调度机制
同步直接执行拦截器流程异步提交到线程池中execute调度器内部成员 异步请求同时存在最大数64异步请求同一个host同时存在的数量5线程池异步等待队列异步执行队列同步执行队列 线程池core0max65535waitTime60s队列无容量等效于CacheThreadPool 有请求时创建线程60s过期最大线程数是无限 64 64 执行完任务后finish()做清理工作 同步/异步都要出队列异步要根据64和5进行计算promoteCalls()方法重新调度请求
5、调度机制异步请求流程
异步请求同时存在不超过64并且同一host的请求数量不超过5则发起请求此时在异步执行队列中不满足条件则放入到异步等待队列中进行等待异步请求完成后执行finish()清理工作会对64和5这两个条件进行检查满足条件会调用promoteCalls()重新进行调度请求
6、拦截器责任链
*自定义用户拦截器可打印日志addInterceptor重试重定向拦截器1.协议 2.超时 3.IO异常 4.SSL异常(SecureSocketLayer安全协议)桥接拦截器GzipCookie缓存拦截器缓存机制连接拦截器打开与目标的连接RealConnection封装了Socket和Socket连接池*自定义网络拦截器addNetworkInterceptor请求服务拦截器:write数据 flushRequest(真正发送请求)
TCP连接复用机制
8、OkHttp连接池和连接复用机制
连接复用机制是基于ConnectionPool类实现的。ConnectionPool类维护了一个双端队列用来存储空闲的RealConnection对象。RealConnection对象代表了一个TCP连接它可以被多个请求共享。³⁴当用户发起一个请求时OKHTTP会先在连接池中查找是否有符合要求的空闲连接如果有就直接使用该连接发送请求如果没有就创建一个新的连接并将其加入到连接池中。清理机制OKHTTP使用了一个后台线程来定期清理闲置的连接。清理的条件是 如果一个连接空闲时间超过了5分钟或者连接池中的空闲连接数超过了5个
缓存机制
9、缓存机制
强缓存不发送请求expires字段协商缓存304表示缓存可用Datat、Expires、Last-Modified、ETag
10、缓存机制详细解析
OkHttp 的缓存机制是按照 HTTP 的缓存机制实现的。OkHttp 具体的数据缓存逻辑封装在 Cache 类中它利用 DiskLruCache 实现。¹³默认情况下OkHttp 不进行缓存数据。可以在构造 OkHttpClient 时设置 Cache 对象在其构造函数中指定缓存目录和缓存大小。¹³OkHttp 提供了一批可以选择的缓存策略通过 CacheControl 进行统一配置通过构造函数我们就可以看出缓存策略。²HTTP 的缓存机制分为 强缓存 和 协商缓存 。而这两种缓存的实现均是通过 HTTP 协议的 头部信息 的字段来进行控制的然后会根据过期时间来判断是否直接从本地缓存加载数据。⁴