okHttp源碼解析------待續

 

看該篇文章前首先要熟悉okHttp的使用,建議先讀OkHttp的簡單使用html

本文的源碼解析參考連接: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來完成的。ide

2.Dispatcher調度者

Dispatcher進行線程分發,有兩個方法,一個是普通的單線程,也就是線程阻塞的方式請求;另外一種就是經過隊列進行併發任務的分發和回調,下面主要分析第二種:高併發

 就是想到生成一個可緩存的線程池,實現高併發、低阻塞的任務調度。this

 

3.Interceptor攔截器

攔截器主要用來觀察、修改、以及可能短路的清除輸出、和響應的回來。spa

一般用來添加、移除或者轉換請求或者xiangying的頭部信息。好比將域名替換爲ip地址,將請求頭中添加host屬性,也能夠添加咱們應用中的一些公共參數,好比設備id、版本號等等。線程

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

 

4.緩存策略

 

4.Socket管理(StreamAllocation)

 

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

 

6計算機常識

相關文章
相關標籤/搜索