okhttp源码简

最近面试中会有这种是否研究过源码的问题,这个时候能说上一段可以充分体现程序员的学习能力和钻研精神,但是时间久了这些东西终归会忘得差不多,所以整理下供自己参考。如有错误,欢迎指正,新司机上路多多关照。

okhttp的优点:1、okhttp支持SPDY协议(由谷歌研发,对http加强)

2、拥有自动维护的socket连接池,减少握手次数

3、拥有队列线程池,轻松些并发

总的来说就是,效率高,安全。


okhttp源码简_第1张图片

首先创建一个okhttpclient,然后创建一个请求(request),然后得到response,同步的调用executed(),异步的调用的方法是enqueue()。

整个框架分为三层,应用层逻辑层,链路层,

以同步的为例,在executed方法中,通过分发器dispatcher将请求添加到执行队列中(类似handler中的消息队列),通过截获器进一步封装,对请求进行压缩修改编码等处理。在逻辑层会将request和client进一步封装成HttpEngine,在HttpEngine发送请求的方法中有对缓存的处理。缓存的数据具有时效性,没有过期的直接使用,有过期的先用过期的,再去联网更新到本地,没有缓存数据,再去网络上获取。在链路层建立连接,在连接池选则一条健康的链接,选择的原则是连接池里面有就直接用,没有的话通过路径选择器去找,还没有就创建新的链接,然后把创建的链接添加到链接池。再往下就是链接socket,网络链接基于socket.


你可能感兴趣的:(okhttp源码简)