okhttp 服务器性能,OkHttp逐步深入

本文主要分析OkHttp处理Http网络请求的整体流程。

下图是Http最简单最核心的示意图,HTTP就是从客户端发送Http Request(请求)给服务器,并接收从服务器返回的Http Response(响应)。

d01f96a9fb45

OkHttp.png

而OkHttp就是协助客户端(主要是安卓)执行Http协议,发Http请求,收Http响应。但是Http协议远比这要复杂得多。

每张图对比之前的图,增加的部分用

math?formula=%5Ccolor%7Bblue%7D%7B%E6%B5%85%E8%93%9D%7D

从拦截器Interceptor开始。

拦截器定义:观察,修改以及可能短路的请求输出和响应请求的回来。通常情况下拦截器用来添加,移除或者转换请求或者回应的头部信息。

d01f96a9fb45

OkHttp3.png

整个拦截器链包括:应用拦截器,OkHttp核心,网络拦截器。其中OkHttp核心包括:

1、RetryAndFollowUpInterceptor: 请求重试拦截器

2、BridgeInterceptor:桥接拦截器

3、CacheInterceptor:缓存拦截器

4、ConnectInterceptor:连接拦截器

这4个部分是不可修改的。而

1、ApplicationInterceptor: 应用拦截器

2、NetworkInterceptor:网络拦截器

是可以配置的。

方向上:

Request是从应用拦截器走到网络拦截器。

Response是从网络拦截器走到应用拦截器。

谈谈调度器Dispatcher

调度器使Http的收发支持高并发。同步调度直接进入拦截器,异步调度则进入调度器,等待分配。调度器内含一个线程池。

d01f96a9fb45

OkHttp4.png

考虑缓存服务器

移动端的应用,所有请求速度越快,用户体验越完美。所以缓存在移动端对于用户体验影响极大。拦截器将Request发出是先发送给本地缓存服务器,若本地缓存服务器拥有有效的缓存,则直接返回Reponse;若没有,才向服务器发Request。

d01f96a9fb45

OkHttp5.png

OkHttp框架常用套路

平时使用OkHttp框架都是用下面的套路:

// 同步请求

OkHttpClient client = new OkHttpClient();

Request request = new Request.Builder()

.url("***")

.build();

Response response = client.newCall(request).execute();

// ==========================================================

// 异步请求

OkHttpClient client = new OkHttpClient();

Request request = new Request.Builder()

.url("***")

.build();

Response response = client.newCall(request).enqueue(new Callback() {

@Override public void onFailure(Request request, Throwable throwable) {

}

@Override public void onResponse(Response response) throws IOException {

}

});

可以看出来涉及核心类明显的有:OkHttpClient、Request 、Response和Call,隐含在其中的有Dispatcher、Interceptor和Cache。当然,整体流程还得细节到HttpCodec、Stream、Router、Connection等。最后我们在之前得出流程图中补充Call类。

Call类

先谈谈Call类的作用。Call是已准备好要执行的请求的接口,RealCall和AsynCall是Call的具体实现。Call类让包装的的同/异步的get/post指令的Request,拥有了动作。Call和Request是同一件事物的内容与动作的分离。内容会变;动作就是同/异步和get/post指令的排列组合,不变;符合程序设计变与不变分离的原则。

d01f96a9fb45

OkHttp6.png

重要接口和实现类总结

BridgeInterceptor implements Interceptor

CacheInterceptor implements Interceptor

CallServerInterceptor implements Interceptor

ConnectInterceptor implements Interceptor

RetryAndFollowUpInterceptor implements Interceptor

RealInterceptorChain implements Interceptor.Chain

OkHttpClient implements Call.Factory, WebSocketCall.Factory

RealCall implements Call

RealConnection implements Connection

RealWebSocket implements WebSocket

RealWebSocketCall implements WebSocketCall

框架源码阅读经验之谈

第一步:从框架的使用入手,了解框架源码主干流程

第二步:将框架从接口和抽象类开始解剖,而后辅以类图加以组合

第三部:抠细节,主要关注功能和设计模式

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值