Okhttp_Connections

Connections

盡管你只提供了URL,OkHttp還是會使用3種方式連接到你的服務(wù)器:URL,Adress,和Route。

URLs

URL(比如 https://github.com/square/okhttp )是HTTP和網(wǎng)絡(luò)的基礎(chǔ)。另外它也是普遍的互聯(lián)網(wǎng)分散式命名方案,它也規(guī)定了如何訪問一個(gè)互聯(lián)網(wǎng)資源。

URL是抽象的:

  • 它規(guī)定了訪問是明文(http)還是密文(https),但是卻沒有規(guī)定使用哪種加密算法,怎么驗(yàn)證其他網(wǎng)站的可靠性( 主機(jī)名驗(yàn)證)和那些證書是可信的(SSLSocketFactory

  • 它沒有規(guī)定是否使用特別的代理服務(wù)器和怎么通過代理服務(wù)器的用戶驗(yàn)證。

每個(gè)URL都指定了具體的訪問路徑(例如:/square/okhttp)和查詢請求(例如:?q=sharks$lang=en)。每個(gè)服務(wù)器都包含了大量的URL。

Addresses

地址指定了一個(gè)服務(wù)器(例如:github.com)和訪問服務(wù)器所必須的靜態(tài)配置:端口,和網(wǎng)絡(luò)協(xié)議(HTTP/2或者SPDY)。

使用相同地址的URL很可能使用相同的底層TCP套接字連接。共享連接有如下好處:更低的網(wǎng)絡(luò)延時(shí),更高的吞吐量(源于TCP的慢啟動(dòng)),更省電。OkHttp使用連接池自動(dòng)重用HTTP/1.X連接和復(fù)用HTTP/2與SPDY連接。

OkHttp中地址的字段一部分來自于URL(scheme,主機(jī)名,端口)其他的來自于 OkHttpClient。

Routes

Routes提供了連接到具體服務(wù)器所必須的動(dòng)態(tài)的信息。IP地址(通過DNS查詢獲?。矸?wù)(通過使用的ProxySelector獲?。┖退褂玫腡LS版本(用于HTTPS連接)。

對于一個(gè)地址可能有很多Routes。例如一個(gè)服務(wù)器托管在多個(gè)數(shù)據(jù)中心在它的DNS響應(yīng)中可能包含多個(gè)IP地址。

Connections

當(dāng)你使用OkHttp訪問一個(gè)URL時(shí),OkHttp將做如下的事情:

  1. 使用URL,配置OkHttpClient來創(chuàng)建一個(gè)address,這個(gè)address規(guī)定了如何連接到服務(wù)器。
  2. 試圖從連接池獲取這個(gè)address的連接
  3. 如果在連接池中沒有找到連接,選擇一個(gè)route連接,這通常意味著通過DNS請求服務(wù)器的IP地址,在必要的情況下選擇TLS版本和代理服務(wù)器。
  4. 如果這是一個(gè)新route,它既可以通過一個(gè)套接字直連,一個(gè)TLS通道(用于HTTP上的HTTPS代理)也可以通過TLS直連必要時(shí)進(jìn)行TLS握手。
  5. 發(fā)送HTTP請求,獲取響應(yīng)。

如果在建立連接時(shí)遇到問題,OkHttp嘗試選擇另外一個(gè)route連接。OkHttp將釋放服務(wù)器地址無法訪問的連接。這對那些已經(jīng)緩存的過時(shí)連接或者不支持的TLS版本同樣起作用(將無效的連接釋放)。

一旦接收response,連接就會被連接池收集用于接下來的連接(復(fù)用),連接池會釋放閑置的連接。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,711評論 19 139
  • 1.OkHttp源碼解析(一):OKHttp初階2 OkHttp源碼解析(二):OkHttp連接的"前戲"——HT...
    隔壁老李頭閱讀 21,642評論 24 176
  • OKHttp的使用和類關(guān)系 本文目的是對OkHttp 框架及其中的常用概念(類)做簡單性介紹。 簡介 OKHttp...
    嘎啦果安卓獸閱讀 3,599評論 1 10
  • 推薦app: ⒈正在學(xué)長投肯定要有長投學(xué)堂的app,不用等著微信轉(zhuǎn)啊轉(zhuǎn)。不過社群版還是要用微信聽課的。 ⒉趁早ap...
    棒棒黑眼圈閱讀 292評論 0 0
  • 時(shí)間過的漫長,等你出現(xiàn)的我,顯得蒼桑。如果有一天我們遇見,記得擁抱再相戀。無言,等了你好多年。
    夜夜閱讀 347評論 0 1

友情鏈接更多精彩內(nèi)容