okhtt使用及原理分析

2021-10-10 00:20:45 字數 2882 閱讀 1751

*# 前言

http 介紹 使用 原理的學習

# okhttp介紹使用 由square公司貢獻的乙個處理網路請求的開源專案,是目前android使用最廣泛的網路框架。從android4.4開始httpurlconnection的底層實現採用的是okhttp。 [

get請求

;//建立乙個request

request request =

newrequest.builder()

.get()

.url

(url)

.build()

;//通過client發起請求

client.

newcall

(request)

.enqueue

(new

callback()

@override

public

void

onresponse

(call call, response response)

throws ioexception }}

);post請求

; requestbody body =

newformbody.builder()

.add

("username"

,"xiaoyi").

build()

; request request =

newrequest.builder()

.post

(body)

.url

(url)

.build()

; client.

newcall

(request)

.enqueue

(new

callback()

);//非同步execute

q: 如何決定將請求放入ready還是running?

a: 如果當前正在請求數不小於64放入ready;如果小於64,但是已經存在同一網域名稱主機的請求5個放入ready!

q: 從running移動ready的條件是什麼?

a: 每個請求執行完成就會從running移除,同時進行第一步相同邏輯的判斷,決定是否移動!

q: 分發器執行緒池的工作行為?

a:無等待,最大併發

當乙個任務通過execute(runnable)方法新增到執行緒池時:

執行緒數量小於corepoolsize,新建執行緒(核心)來處理被新增的任務;

執行緒數量大於等於 corepoolsize,存在空閒執行緒,使用空閒執行緒執行新任務;

執行緒數量大於等於 corepoolsize,不存在空閒執行緒,新任務被新增到等待佇列,新增成功則等待空閒執行緒,新增失敗:

執行緒數量小於maximumpoolsize,新建執行緒執行新任務;

執行緒數量等於maximumpoolsize,拒絕此任務

在請求需要執行時,通過 getresponsewithinterceptorchain 獲得請求的結果: response

***責任鏈 請求任務交給chain即可

重試***在交出(交給下乙個***)之前,負責判斷使用者是否取消了請求;在獲得了結果之後,會根據響應碼判斷是否需要重定

向,如果滿足條件那麼就會重啟執行所有***。

橋接***在交出之前,負責將http協議必備的請求頭加入其中(如:host)並新增一些預設的行為(如:gzip壓縮);在獲得了結果後,呼叫儲存cookie介面並解析gzip資料。

快取***顧名思義,交出之前讀取並判斷是否使用快取;獲得結果後判斷是否快取。

連線***在交出之前,負責找到或者新建乙個連線,並獲得對應的socket流;在獲得結果後不進行額外的處理。

請求伺服器***進行真正的與伺服器的通訊,向伺服器傳送資料,解析讀取的響應資料。

Spring Cloud原理分析及使用《二》

1.服務提供者 服務註冊 服務提供者在啟動的時候,會通過rest請求將自己註冊到eureka server上,同時帶上了自身服務的一些元資料資訊。eureka收到這個請求之後,會將元資料 參見文末註解 儲存到乙個雙層的map中。第一層map的key為服務名,第二層的key為具體服務的例項名。服務同步...

LVDS協議及原理分析

lvds是一種低擺幅的差分訊號技術,它使得訊號能在差分pcb 線對或平衡電纜上以 幾百mbps的速率傳輸,其低壓幅和低電流驅動輸出實現了低雜訊和低功耗。ieee 在兩個標準中對lvds 訊號進行了定義。ansi tia e ia 644 中,推薦最大速率為 655mbps 理論極限速率為1.923g...

MyBatis框架及原理分析

封裝jdbc操作 利用反射打通j a類與sql語句之間的相互轉換 mybatis的主要設計目的就是讓我們對執行sql語句時對輸入輸出的資料管理更加方便,所以方便地寫出sql和方便地獲取sql的執行結果才是mybatis的核心競爭力。mybatis的配置 mybatis框架和其他絕大部分框架一樣,需要...