OkHttp——Dispatcher(5)

OkHttp架構圖

OkHttp的整體架構如下圖所示,其中Dispatcher處RealCall和攔截器之間。

OKHttp整體架構圖

Dispathcer 整體分析

Dispatcher是保存同步和異步Call的地方,並負責執行異步AsyncCall。

如下圖所示,針對同步請求,Dispatcher使用Deque runningSyncCalls保存了同步任務;針對異步請求,Dispatcher使用Deque runningAsyncCalls用來保存正在執行的請求,使用Deque readyAsyncCalls保存準備執行的請求,爲什麼針對異步請求要使用兩個隊列呢?因爲Dispatcher默認支持最大的併發請求是64個,單個Host最多執行5個併發請求,如果超過該限制,則Call會先被加入到readyAsyncCall中,當出現空閒的線程時,再將readyAsyncCall中的線程移入到runningAsynCalls中,執行請求。

Dispathcer

Dispatcher的異步請求實現

這裏重點分析一下異步請求的方式,同步請求已經在Call那節分析過了。

異步請求主要是通過AsyncCall 這個類實現。
下面是這個類的Diagrams圖,從圖中我們可以看到AsyncCall其實是實現Runnable接口,所以,在Dispathcher的線程池中最終會調用AsyncCall的execute()方法執行異步請求:

在這裏插入圖片描述

在AsyncCall中包含有一個Callback的接口,該接口主要包含2個回調方法,如下圖:
這兩個方法用來接收得到的異步響應。
Callback

接下來我們看看真正執行異步請求的方法,如下圖所示:
其中在執行失敗或者正常響應後把相應的內容填充到我們的Callback對象中。
最後通過執行finished方法結束此處異步請求。
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章