zoukankan      html  css  js  c++  java
  • 学习okhttp wiki--Connections.

    Connections##

      尽管你只提供了URL,OkHttp使用三种类型来创建它和你的web服务器的连接:URL,地址(Address)和路由(Route)。

    URLs###

      URLs (例如 https://github.com/square/okhttp) 是HTTP和互联网的基础。除了作为网络上所有事物的一种通用的,去中心化的命名策略,它们还指明了如何访问网络资源。

      URLs是抽象的:

    1. 它们指定了访问是明文的(http)还是加密的(https),但没有指明哪些加密算法不应该被使用。也没有指定如何验证对方的证书(HostnameVerifier) 和哪些证书被信任(SSLSocketFactory)。

    2. 它们没有指定是否应该使用特定的代理服务器,以及如何认证代理服务器。

      它们也是具体的:每一个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,下面是它会做的:

    1. 它使用这个URL和配置后的OkHttpClient来创建一个address。这个地址说明了我们将如何连接到web服务器。

    2. 它尝试从connection pool中取出使用这一地址的连接。

    3. 如果在池中没有发现可用的连接,它会选择一个route来尝试。这通常意味着做一个DNS请求来获取服务器的IP地址。然后,如果需要,它会选择一个TLS版本和代理服务器。

    4. 如果它是一个新的路由,它会建立一个直接的套接字连接,或者TLS隧道(用于HTTPS穿越HTTP代理),或者直接的TLS连接。如果需要,它会做TLS握手。

    5. 它发送HTTP请求,读取响应。

      如果连接出了问题,OkHttp会选择另一个路由然后重试。这让OkHttp在部分服务器地址不可访问时可以恢复。在连接池中的连接过期或者尝试的TLS版本不支持时,这种重试也是有用的。

      一旦接收到了响应,连接会返回到连接池中,等待在将来的请求中重用。连接在一段时间不被激活后,会从连接池中删除。

  • 相关阅读:
    HDU 5698 瞬间移动
    HDU 5695 Gym Class
    HDU 5694 BD String
    HDU 5692 Snacks
    HDU 5691 Sitting in Line
    胜利大逃亡
    BFS(广度优先搜索)
    计算直线的交点数
    Division
    Jesse's Code
  • 原文地址:https://www.cnblogs.com/yuanchongjie/p/4962310.html
Copyright © 2011-2022 走看看