学习okhttp wiki--Connections.
Connections
盡管你只提供了URL,OkHttp使用三種類型來創(chuàng)建它和你的web服務(wù)器的連接:URL,地址(Address)和路由(Route)。
URLs
URLs (例如 https://github.com/square/okhttp) 是HTTP和互聯(lián)網(wǎng)的基礎(chǔ)。除了作為網(wǎng)絡(luò)上所有事物的一種通用的,去中心化的命名策略,它們還指明了如何訪問網(wǎng)絡(luò)資源。
URLs是抽象的:
它們指定了訪問是明文的(http)還是加密的(https),但沒有指明哪些加密算法不應(yīng)該被使用。也沒有指定如何驗證對方的證書(HostnameVerifier) 和哪些證書被信任(SSLSocketFactory)。
它們沒有指定是否應(yīng)該使用特定的代理服務(wù)器,以及如何認證代理服務(wù)器。
它們也是具體的:每一個URL標識了一個明確的路徑(例如 /square/okhttp) 和查詢參數(shù)(例如 ?q=sharks&lang=en)。每一個web服務(wù)器會支持很多的URL。
Addresses
地址指定了一個web服務(wù)器(例如 github.com) 以及連接此服務(wù)器需要的所有靜態(tài)配置:端口號,HTTPS設(shè)置,偏好的網(wǎng)絡(luò)協(xié)議(例如 HTTP/2 or SPDY)。
共享同樣地址的URL可能也共享同樣的底層TCP套接字連接。共享連接有明顯的性能優(yōu)勢:更少的延遲,更高的吞吐量(歸因于TCP慢啟動) 和節(jié)省電量。OkHttp使用了一個ConnectionPool來自動重用HTTP/1.x連接,多路復(fù)用HTTP/2和SPDY連接。
在OkHttp中,地址的部分字段來自于URL(協(xié)議,主機名和端口),其余的來自O(shè)kHttpClient。
Routes
路由提供了真正連上web服務(wù)器所需要的動態(tài)信息。這是一個用于嘗試的特定的IP地址(比如由DNS查詢發(fā)現(xiàn)的),使用的正確的代理服務(wù)器(如果用了ProxySelector)和使用哪個版本的TLS來協(xié)商(用于HTTPS連接)。
單一的地址可能存在多個路由。例如,一個托管在多個數(shù)據(jù)中心的web服務(wù)器在它的DNS響應(yīng)中可能產(chǎn)生多個IP地址。
Connections
當你使用OkHttp請求一個URL,下面是它會做的:
它使用這個URL和配置后的OkHttpClient來創(chuàng)建一個address。這個地址說明了我們將如何連接到web服務(wù)器。
它嘗試從connection pool中取出使用這一地址的連接。
如果在池中沒有發(fā)現(xiàn)可用的連接,它會選擇一個route來嘗試。這通常意味著做一個DNS請求來獲取服務(wù)器的IP地址。然后,如果需要,它會選擇一個TLS版本和代理服務(wù)器。
如果它是一個新的路由,它會建立一個直接的套接字連接,或者TLS隧道(用于HTTPS穿越HTTP代理),或者直接的TLS連接。如果需要,它會做TLS握手。
它發(fā)送HTTP請求,讀取響應(yīng)。
如果連接出了問題,OkHttp會選擇另一個路由然后重試。這讓OkHttp在部分服務(wù)器地址不可訪問時可以恢復(fù)。在連接池中的連接過期或者嘗試的TLS版本不支持時,這種重試也是有用的。
一旦接收到了響應(yīng),連接會返回到連接池中,等待在將來的請求中重用。連接在一段時間不被激活后,會從連接池中刪除。
轉(zhuǎn)載于:https://www.cnblogs.com/yuanchongjie/p/4962310.html
總結(jié)
以上是生活随笔為你收集整理的学习okhttp wiki--Connections.的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C动态分配内存
- 下一篇: 中信银行信用卡年费多少 费年怎么免除