美文网首页安卓架构师开发进阶
2019-08-12 Okhttp框架知识梳理(课堂笔记)

2019-08-12 Okhttp框架知识梳理(课堂笔记)

作者: 默默_大魔王 | 来源:发表于2019-08-16 19:04 被阅读2次

    优缺点

    1:支持http/2允许对同一主机的所有请求共享一个套接字

    2:通过连接池,减少了请求延迟

    3:默认Gzip压缩数据(okio框架自动完成gzip数据读取)

    4:响应缓存,避免重复请求网络

    5;请求失败自动重试主机的其他ip,自动重定向

    OkhttpClient-》Request-》call-》ResponseBody  四个对象完成一个get请求

    所有请求逻辑大部分在拦截器中,在进入拦截器之前,还需要依靠分发器来调配请求任务。

    一:什么是分发器?

    概念,内部维护队列与线程池,完成请求调配,五大默认拦截器完成整个请求过程

    分发器  正在请求数量是有限制的,64个,同一域名正在请求的个数7最大请求host是5,值都可以修改,默认分别是64和5,满足需求执行线程发起请求,如果不满足,readyAsyncCall.add()

    从readyAsyncCall到runningAsyncCall流程

    请求结束,如果runningAsyncCall大于64并且readAsyncCall不为空, 移除一个请求,runningAsyncCall再从readAsyncCall减一个,

    线程池

    当提交一个任务的时候,线程数量小于corePoolSize,新建线程来处理被添加的任务

    当数量大于corePoolSize,不存在空闲线程,新任务被添加到等待队列,添加成功则等待空闲线程

    添加失败,线程数量大于maxmumPoolSize,新建线程执行新任务,

    线程数量等于maxmunPoolSize,拒绝此任务

    1:arrayBlockQueue,指定核心线程数,会阻塞线程

    2:linkedBlocjQueue,可以不指定,默认是int最大值,会阻塞线程

    3:synchBlockQueue,默认核心线程数是0,不会阻塞线程,当前线程没有执行完,如果有空位,会立马执行下一个线程,okhttp使用的是此线程,能满足最大并发。

    二:什么是拦截器

    五大拦截器,使用的是责任链模式,层层递进

    1:重试重定向取消拦截器,负责判断用户是否取消了请求,获取结果之后或根据响应码判断是否重定向,如果满足条件,就会之重启执行所有拦截器。

    (1):重试重定向判定,okhttpclient默认可以重试,一下异常不会重试,协议异常,socket异常,ssl证书格式问题,ssl校验没问题

    (2):重定向次数最大20,每次重定向都会加一,直到20次后,不再重定向。

    2:桥接拦截器

    (1):负责将http必备的请求头加入到请求中,如(Host请求头,GZip压缩),获取结果之后,读取cookie,解压Gzip;

    3:缓存拦截器

    一: 缓存条件

    (第一步):检查没有缓存,发送一个请求

    (第二步):https会保存握手信息,如果首次发送htpps请求没有缓存握手信息,发起网络或请求

    (第三步):判断响应码与响应头,可以缓存的响应码为,200,230,204,300,301,404,410,414,501,308,或者缓存响应码为302,307同时存在响应头Explres或者Cache-Control 包含max-age private public其中的一个,同时请求的响应头和缓存的响应头中不包含Cache-Control:no-store

    (第四步):用户请求配置,如果用户请求头没有设置,cache-control:no-cache或者if-modified-since或者 if-none-match

    以上四步都满足,okhttp使用缓存,响应资源不变

    二:缓存时效性

    1:缓存有效性时间判定max-age【秒】 缓存最大有效时间(精准时间)

    2:如果没有max-age,再去去判断 Expires(过期时间)(精准时间)

    3:缓存响应包含Last-Modified:响应最后修改时间(大概时间)

    4:缓存过期后有效期时间,maxstateMillis

    三:缓存检测

     

    4:连接拦截器,使用的socket链接

    5:请求服务器拦截器,向服务器发送数据,解析读取的数据。

    相关文章

      网友评论

        本文标题:2019-08-12 Okhttp框架知识梳理(课堂笔记)

        本文链接:https://www.haomeiwen.com/subject/elryjctx.html