*# 前言
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框架和其他絕大部分框架一樣,需要...