標籤:步驟 eal sock 使用 web 並發 cep tar class
看該篇文章前首先要熟悉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攔截器
4.緩衝策略
4.Socket管理(StreamAllocation)
5.HTTP請求序列化/還原序列化
6電腦常識
okHttp源碼解析------待續