android开源框架18-19okhttp源码

okhttp 通过分发器、责任链模式、五大拦截器来处理

分发器

同步: execute
异步:enqueue
dispatch:
两种队列:执行队列;等待队列。
如果执行队列没满,放入执行队列,如果满了放等待队列。

  • 对于同步请求,分发器只记录请求,用于判断IdleRunnable是否需要执行;

  • 对于异步请求,线程池(核心线程数0,等待时间60秒,队列0 实现的无等待,最大并发)
    当一个任务通过execute(Runnable)方法添加到线程池时;
    线程数量小于设置的线程池核心线程数,新建线程(核心)来处理被添加的任务;
    线程数量大于等于设置的线程池核心线程数,存在空闲线程,使用空闲线程执行新任务;
    线程数量大于等于 设置的线程池核心线程数,不存在空闲线程,新任务被添加到等待队列;
    添加成功则等待空闲线程, 添加失败:
    线程数量小于最大线程数,新建线程执行新任务;
    线程数量等于最大线程数,拒绝此任务。

  • 如何决定将请求放入ready还是running
    当客户端最大线程数小于默认64,并且同一服务器请求小于5试,放入running;反之

  • 从ready移动running的条件是什么
    每个请求执行完成就会从running移除,同时进行第一步相同逻辑的判断

  • 分发器线程池的工作行为
    无等待,最大并发

  • 责任链模式
    对象行为型模式,为请求创建了一个接收者对象的链,在处理请求的时候执行过滤(各司其职)。
    责任链上的处理者负责处理请求,客户只需要将请求发送到责任链即可,无须关心请求的处理细节和请求的传递,所以职 责链将请求的发送者和请求的处理者解耦了。

  • 五大拦截器
    1、重试拦截器在交出(交给下一个拦截器)之前,负责判断用户是否取消了请求;在获得了结果之后 ,会根据响应码判断是否需要重定向,如果满足条件那么就会重启执行所有拦截器。
    2、桥接拦截器在交出之前,负责将HTTP协议必备的请求头加入其中(如:Host)并添加一些默认的 行为(如:GZIP压缩);在获得了结果后,调用保存cookie接口并解析GZIP数据。
    3、缓存拦截器顾名思义,交出之前读取并判断是否使用缓存;获得结果后判断是否缓存。
    4、连接拦截器在交出之前,负责找到或者新建一个连接,并获得对应的socket流;在获得结果后
    不进行额外的处理。
    5、请求服务器拦截器进行真正的与服务器的通信,向服务器发送数据,解析读取的响应数据。

其他:

Postmain 测接口工具
telnet API tester
ssl握手

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容