美文网首页
OkHttp3基础篇:Connections

OkHttp3基础篇:Connections

作者: zhuanghongji | 来源:发表于2016-04-04 13:59 被阅读189次

    虽然我们想发起请求时只是提供了 URL,但 OkHttp 会通过三种类型与web服务器进行连接:URLAddressRoute .

    URLs

    URLs(如 https://github.com/square/okhttp )是 HTTP 和 Internet 的基础。 除了 to being a universal, decentralized naming scheme for everything on the web,它们还指定了如何访问网络资源

    • URLs 是抽象的:

    • 它们指定该 call 是明文的 (http) 或是加密的 (https),但没有指定该用哪个加密算法。 他们也不指定如何验证对方的证书 (HostnameVerifier) 或证书是否可以信任 (SSLSocketFactory)

    • 它们不指定是否应使用特定的代理服务器(proxy server),也不指定如何与该代理服务器进行身份验证

    • URLs 是具体的:

    • 每个URL识别特定的路径(如 /square/okhttp )和查询(如 ?q=sharks&lang=en

    • Each webserver hosts many URLs.

    Addresses

    Addresses (地址)指定一个网络服务器(如github.com )和所有必要的连接到服务器的 静态 配置:

    • 端口号
    • HTTPS 设置
    • 首选的网络协议(如 HTTP/2SPDY

    共享相同地址的 URL 也可以共享相同的 TCP socket 连接
    共享一个连接有实实在在的性能优点:

    • 更低的延迟
    • 更高的吞吐量(由于TCP的慢启动 )
    • 保守的电量

    OkHttp使用一个 ConnectionPool 自动重用 HTTP/1.x 的连接和 multiplexes HTTP/2 and SPDY connections.

    OkHttp Address 中的的某些字段来自 URLschemehostnameport),其余的则来自 OkHttpClient .

    Routes

    路由(Routes)提供真正连接到一个网络服务器所必需的动态信息。 This is the specific IP address to attempt (as discovered by a DNS query), the exact proxy server to use (if a ProxySelector is in use), and which version of TLS to negotiate (for HTTPS connections).

    单个地址可能有许多路由:
    例如,在多个数据中心托管的Web服务器可能会在其DNS响应产生多个IP地址

    Connections

    当你用OkHttp请求一个URL,它会做以下工作:

    1. 它使用 URL 和配置了的 OkHttpClient 来创建 **address (地址) **
      此 address 指定我们将如何连接到网络服务器
    2. 它试图从 连接池 中取得使用该 address 的连接
    3. 如果它没有找到在池中的连接,它会选择一个 route 去尝试。这通常意味着使一个 DNS 请求去获取服务器的IP地址。接下来如果需要,它会选择一个 TLS 版本和代理服务器
    4. 如果它是一个新的 route,它或通过建立直接的socket连接,或使用 TLS 安全通道(for HTTPS over an HTTP proxy),或直接 TLS 连接。无论如何,它的 TLS 握手是必要的
    5. 它发送 HTTP 请求,并读取响应

    如果有连接出现问题,OkHttp 将选择另一条 route ,然后再试一次。当服务器地址的子集不可达时,OkHttp是允许进行恢复的。 当连接池是陈旧或者 TLS 版本不受支持时,这也是有用的。

    • 一旦响应已经被接收到,该连接将被返回到池中,因此它可以被将来的请求进行重用
    • Connections 是从池中闲置一段时间后会被驱逐

    参考文章
    [1] OkHttp官方wiki: Connections

    相关文章

      网友评论

          本文标题:OkHttp3基础篇:Connections

          本文链接:https://www.haomeiwen.com/subject/xfpulttx.html