OkHttp3-連接(Connections)

轉(zhuǎn)載請注明出處 http://www.reibang.com/p/41a2d6e3204f (作者:韓棟)
本文為譯文尼酿,由于譯者水平有限拾积,歡迎拍磚殉挽,讀者也可以閱讀原文
OkHttp3-基本用法OkHttp3-使用進階(Recipes)拓巧,OkHttp3-請求器(Calls)斯碌,OkHttp3-連接(Connections),OkHttp3-攔截器(Interceptor)


雖然通常你只需要提供一個URL給OkHttp肛度,OkHttp就可以幫你完成其他事情扇丛。但是實際上OkHttp連接服務(wù)器需要三個條件:URL愉镰,AddressRoute

URLs(統(tǒng)一資源定位符)

提供一個URL(比如https://github.com/square/okhttp)讓Http去連接服務(wù)器是最基本的工作捞镰。還有一種漸漸普遍的文件定位方式稱為URN(同意名稱定位符),它是利用一種分散式的命名方案去指定所需要訪問的資源文件列牺。
URLs是抽象的:

  • URL可以指定請求的類型是明文(Http)或者是密文(Https)贬堵,但是無法指定使用的是哪個加密算法,也無法指定怎樣去驗證證書(HostnameVerifier)或者指定哪種證書可以被驗證(SSLSocketFactory)锁荔。
  • URL無法指定使用哪些代理服務(wù)器蟀给,以及指定哪些代理服務(wù)器進行身份認證。

URL是具體的:

  • 每一個URL都可以定義一個指定的路徑(比如/square/okhttp)以及查詢條件(比如?q=sharks&lang=en)阳堕。每個主機可以擁有多個URL跋理。

Address(地址)

Address在OKHttp中是一個對象,它為OkHttp提供靜態(tài)配置恬总!
地址指定了一個服務(wù)器(比如github.com)以及連接此服務(wù)器所需要的靜態(tài)配置:端口號前普,HTTPS設(shè)置,以及指定的網(wǎng)絡(luò)協(xié)議(比如HTTP/2或者SPDY)壹堰。

相同地址的URL也可以共用相同的底層TCP Socket連接拭卿。共用相同的連接對于性能有很大的提升:更低的延遲骡湖,更大的吞吐量(復用連接,由于每個TCP啟動的都需要較多的準備工作)峻厚,更少的電能損耗响蕴。OkHttp使用一個連接池,來自動復用HTTP/1.x connections惠桃、HTTP/2浦夷、SPDY連接。

URL為地址提供了一些字段(比如域名辜王、主機名劈狐、端口號),其他的字段都來自于OkHttpClient呐馆。

Routes(路由)

Routes在OKHttp中是一個對象懈息,它為OkHttp提供動態(tài)配置!
路由提供了實際連接到服務(wù)器所需要的動態(tài)配置摹恰。比如所指定用來嘗試連接服務(wù)器的IP地址(從DNS服務(wù)商獲得)辫继、連接過程中實際所使用到的代理服務(wù)器(如果使用了ProxySelector),以及使用的是哪個版本的
TLS協(xié)議(當使用Https協(xié)議連接時候需要)俗慈。

對于一個地址來說 姑宽,可能存在有很多種路由的方式。比如闺阱,當一個服務(wù)器被托管在多個數(shù)據(jù)中心炮车,這時路由從DNS供應商獲取的響應中就可以獲取到多個IP地址。

Connections(連接)

當你使用OkHttp去請求一個URL時酣溃,OkHttp為你做了如下事情:

  1. OkHttp使用一個URL以及經(jīng)過配置的OkHttpClient去創(chuàng)建一個address瘦穆。這個address表示我們將如何連接服務(wù)器。
  2. OkHttp嘗試從連接池中獲取一個適用于此addressConnection赊豌。
  3. 如果OkHttp沒有找到對應的Connection扛或,那么OkHttp就會選擇一條路由去嘗試創(chuàng)建連接。這通常意味著需要向DNS供應商發(fā)送一個請求去獲取這個服務(wù)器的IP地址碘饼,以及可能還需要選擇TLS版本和代理服務(wù)器熙兔。
  4. 如果此路由是一條新的路由,它將通過構(gòu)建一個Socket連接艾恼,一個TLS連接(通過Http代理的Https)住涉,或者直接通過一個TLS進行連接(它需要TLS握手)。
  5. OkHttp發(fā)送Http請求并讀取響應钠绍。

如果在連接的過程中出現(xiàn)問題舆声,那么OkHttp將會選擇其他的路由進行重新連接。這意味著當一個服務(wù)器的某一個IP地址無法訪問時柳爽,OkHttp可以嘗試別的IP地址進行訪問媳握〖钇ǎ或者當一個連接池過期或者你嘗試連接的所用的TLS版本不受服務(wù)器支持時,這種重連機制也是非常有用的毙芜。

一旦客戶端發(fā)來接收到來自服務(wù)器的響應,那么這個Connection將會被放置到連接池中以備于將來新的連接進行復用争拐。Connection在長期不使用的情況下腋粥,將會從這個連接池中被移除。

··

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末架曹,一起剝皮案震驚了整個濱河市隘冲,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌绑雄,老刑警劉巖展辞,帶你破解...
    沈念sama閱讀 221,820評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異万牺,居然都是意外死亡罗珍,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,648評論 3 399
  • 文/潘曉璐 我一進店門脚粟,熙熙樓的掌柜王于貴愁眉苦臉地迎上來覆旱,“玉大人,你說我怎么就攤上這事核无】鄢” “怎么了?”我有些...
    開封第一講書人閱讀 168,324評論 0 360
  • 文/不壞的土叔 我叫張陵团南,是天一觀的道長噪沙。 經(jīng)常有香客問我,道長吐根,這世上最難降的妖魔是什么正歼? 我笑而不...
    開封第一講書人閱讀 59,714評論 1 297
  • 正文 為了忘掉前任,我火速辦了婚禮拷橘,結(jié)果婚禮上朋腋,老公的妹妹穿的比我還像新娘。我一直安慰自己膜楷,他們只是感情好旭咽,可當我...
    茶點故事閱讀 68,724評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著赌厅,像睡著了一般穷绵。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上特愿,一...
    開封第一講書人閱讀 52,328評論 1 310
  • 那天仲墨,我揣著相機與錄音勾缭,去河邊找鬼。 笑死目养,一個胖子當著我的面吹牛俩由,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播癌蚁,決...
    沈念sama閱讀 40,897評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼幻梯,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了努释?” 一聲冷哼從身側(cè)響起碘梢,我...
    開封第一講書人閱讀 39,804評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎伐蒂,沒想到半個月后煞躬,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,345評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡逸邦,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,431評論 3 340
  • 正文 我和宋清朗相戀三年恩沛,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片缕减。...
    茶點故事閱讀 40,561評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡复唤,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出烛卧,到底是詐尸還是另有隱情佛纫,我是刑警寧澤,帶...
    沈念sama閱讀 36,238評論 5 350
  • 正文 年R本政府宣布总放,位于F島的核電站呈宇,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏局雄。R本人自食惡果不足惜甥啄,卻給世界環(huán)境...
    茶點故事閱讀 41,928評論 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望炬搭。 院中可真熱鬧蜈漓,春花似錦、人聲如沸宫盔。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,417評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽灼芭。三九已至有额,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背巍佑。 一陣腳步聲響...
    開封第一講書人閱讀 33,528評論 1 272
  • 我被黑心中介騙來泰國打工茴迁, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人萤衰。 一個月前我還...
    沈念sama閱讀 48,983評論 3 376
  • 正文 我出身青樓堕义,卻偏偏與公主長得像,于是被迫代替她去往敵國和親脆栋。 傳聞我的和親對象是個殘疾皇子倦卖,可洞房花燭夜當晚...
    茶點故事閱讀 45,573評論 2 359

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