zoukankan      html  css  js  c++  java
  • okHttp源码解析------待续

    看该篇文章前首先要熟悉okHttp的使用,建议先读OkHttp的简单使用

    本文的源码解析参考链接:okhttp3总和解析

    1.从URL请求处理开始分析

    由异步将请求加入调度方法开始引入正题:

    getClient().newCall(request).enqueue(new Callback() {
                        @Override
                        public void onFailure(Call call, IOException e) {
    
                        }
    
                        @Override
                        public void onResponse(Call call, Response response) throws IOException {
                        }
    });
    /**
       * Prepares the {@code request} to be executed at some point in the future.
       */
      @Override public Call newCall(Request request) {
        return new RealCall(this, request);
      }
    @Override public void enqueue(Callback responseCallback) {
        enqueue(responseCallback, false);
      }
    
      void enqueue(Callback responseCallback, boolean forWebSocket) {
        synchronized (this) {
          if (executed) throw new IllegalStateException("Already Executed");
          executed = true;
        }
        client.dispatcher().enqueue(new AsyncCall(responseCallback, forWebSocket));
      }

    由源码上的调用顺序,我们将步骤转化为以下的几个技术点:

    由以上的使用okhttp请求的调用代码,可以看到最终的请求时通过dispatcher来完成的。

    2.Dispatcher调度者

    Dispatcher进行线程分发,有两个方法,一个是普通的单线程,也就是线程阻塞的方式请求;另一种就是通过队列进行并发任务的分发和回调,下面主要分析第二种:

     就是想到生成一个可缓存的线程池,实现高并发、低阻塞的任务调度。

    3.Interceptor拦截器

    拦截器主要用来观察、修改、以及可能短路的清除输出、和响应的回来。

    通常用来添加、移除或者转换请求或者xiangying的头部信息。比如将域名替换为ip地址,将请求头中添加host属性,也可以添加我们应用中的一些公共参数,比如设备id、版本号等等。

    http://www.jianshu.com/p/2710ed1e6b48 

    4.缓存策略

    4.Socket管理(StreamAllocation)

    5.HTTP请求序列化/反序列化

    6计算机常识

  • 相关阅读:
    ACM_“IP地址”普及(进制转换)
    goj 堆箱子咯(栈)
    ACM_夏天到了,又到了出游的季节
    ACM_迟到的祝福(四)
    ACM_梦中的函数
    ACM_ZHANGZHANG喜欢手表
    ACM_出题人这样不好吧
    ACM_Mystery
    ACM_Repeating Characters
    P1160 队列安排 luogu洛谷
  • 原文地址:https://www.cnblogs.com/could-deng/p/6744974.html
Copyright © 2011-2022 走看看