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