OkHttp之連接

盡管你只提供了URL,OkHttp在規(guī)劃連接服務器的連接時使用了三種類型:URL,Address和Route巧还。

URLs

URLs是HTTP和網(wǎng)絡的最基本的峦甩。除了作為一個通用的悍汛,網(wǎng)絡資源的分散命名機制柑船,它們也規(guī)定了如何訪問網(wǎng)絡資源杭抠。

URLs是抽象的:

  • 它們規(guī)定了調(diào)用可能是明文(http)或密文(https),但是沒有規(guī)定應該使用哪個加密算法阶牍。也沒有規(guī)定如何驗證對等的證書(HostnameVerifier)或者哪個證書可被信任(SSLSocketFactory)喷面。
  • 它們沒有規(guī)定是否一個特定的代理服務器可以使用或如何認證代理服務器。

它們也是具體的:每一個URL確定一個特定路徑(像/square/okhttp)和查詢(像?q=sharks&lang=en)走孽。每個服務器有很多URL乖酬。

Addresses

Addresses規(guī)定了服務器(像github.com)和所有連接服務器需要的靜態(tài)配置:端口號,HTTPS設置和優(yōu)先網(wǎng)絡協(xié)議(像HTTP/2或SPDY)融求。

共享相同address的URLs也可能共享相同的下層TCP socket連接咬像。共享一個連接有巨大的性能好處:低延遲,高吞吐量(因為TCP啟動慢)和節(jié)省電源生宛。OkHttp使用ConnectionPool來自動復用HTTP/1.X連接和多路傳輸HTTP/2和SPDY連接县昂。

在OkHttp中,address的一些字段來自URL(機制陷舅,主機名倒彰,端口),剩下的來自OkHttpClient莱睁。

Routes

Routes提供了真正連接到服務器所需要的動態(tài)信息待讳。這是明確的要嘗試的IP地址(通過DNS查詢發(fā)現(xiàn)),明確的要使用的代理服務器(如果使用了ProxySelector)以及什么版本的TLS來協(xié)商(針對HTTPS連接)仰剿。

對于一個地址有可能有很多路由创淡,一個存在多個數(shù)據(jù)中心的網(wǎng)絡服務器可能在它的DNS響應中產(chǎn)生多個IP地址。

Connections

當你使用OkHttp請求一個URL時南吮,下面是它所做的:

  1. 它使用URL和配置的OkHttpClient來創(chuàng)建一個address琳彩。這個address規(guī)定了如何連接到服務器。
  2. 它嘗試用這個address從連接池中獲取一個連接部凑。
  3. 如果它沒有在池中找到一個連接露乏,它會選擇一個route來嘗試。這通常意味著創(chuàng)建一個DNS請求來獲取服務器的IP地址涂邀。如果需要瘟仿,它之后會選擇一個TLS版本和代理服務器。
  4. 如果這是一個新route比勉,它會通過構建一個直接的socket連接或一個TLS隧道(對于HTTP代理上的HTTPS)或一個直接的TLS連接來進行連接劳较。如果需要它會執(zhí)行TLS握手驹止。
  5. 它發(fā)送HTTP請求然后讀取響應。

當連接出現(xiàn)問題時兴想,OkHttp會選擇另外一個route進行嘗試。這使得OkHttp可以在服務器部分地址無法訪問時恢復赡勘。它同時對于當連接池過期或嘗試的TLS版本不支持時有用嫂便。

一旦接收到響應,連接就會返回到池中闸与,這樣它可以在之后的請求復用毙替。連接空閑一段時間會從池中移除。

原文鏈接:
https://github.com/square/okhttp/wiki/Connections

OkHttp官方文檔系列文章:

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末践樱,一起剝皮案震驚了整個濱河市厂画,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌拷邢,老刑警劉巖袱院,帶你破解...
    沈念sama閱讀 221,888評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異瞭稼,居然都是意外死亡忽洛,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,677評論 3 399
  • 文/潘曉璐 我一進店門环肘,熙熙樓的掌柜王于貴愁眉苦臉地迎上來欲虚,“玉大人,你說我怎么就攤上這事悔雹「炊撸” “怎么了?”我有些...
    開封第一講書人閱讀 168,386評論 0 360
  • 文/不壞的土叔 我叫張陵腌零,是天一觀的道長梯找。 經(jīng)常有香客問我,道長益涧,這世上最難降的妖魔是什么初肉? 我笑而不...
    開封第一講書人閱讀 59,726評論 1 297
  • 正文 為了忘掉前任,我火速辦了婚禮饰躲,結(jié)果婚禮上牙咏,老公的妹妹穿的比我還像新娘。我一直安慰自己嘹裂,他們只是感情好妄壶,可當我...
    茶點故事閱讀 68,729評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著寄狼,像睡著了一般丁寄。 火紅的嫁衣襯著肌膚如雪氨淌。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,337評論 1 310
  • 那天伊磺,我揣著相機與錄音盛正,去河邊找鬼。 笑死屑埋,一個胖子當著我的面吹牛豪筝,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播摘能,決...
    沈念sama閱讀 40,902評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼续崖,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了团搞?” 一聲冷哼從身側(cè)響起严望,我...
    開封第一講書人閱讀 39,807評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎逻恐,沒想到半個月后像吻,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,349評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡复隆,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,439評論 3 340
  • 正文 我和宋清朗相戀三年萧豆,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片昏名。...
    茶點故事閱讀 40,567評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡涮雷,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出轻局,到底是詐尸還是另有隱情洪鸭,我是刑警寧澤,帶...
    沈念sama閱讀 36,242評論 5 350
  • 正文 年R本政府宣布仑扑,位于F島的核電站览爵,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏镇饮。R本人自食惡果不足惜蜓竹,卻給世界環(huán)境...
    茶點故事閱讀 41,933評論 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望储藐。 院中可真熱鬧俱济,春花似錦、人聲如沸钙勃。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,420評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽辖源。三九已至蔚携,卻和暖如春希太,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背酝蜒。 一陣腳步聲響...
    開封第一講書人閱讀 33,531評論 1 272
  • 我被黑心中介騙來泰國打工誊辉, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人亡脑。 一個月前我還...
    沈念sama閱讀 48,995評論 3 377
  • 正文 我出身青樓堕澄,卻偏偏與公主長得像,于是被迫代替她去往敵國和親远豺。 傳聞我的和親對象是個殘疾皇子奈偏,可洞房花燭夜當晚...
    茶點故事閱讀 45,585評論 2 359

推薦閱讀更多精彩內(nèi)容