OkHttp 文档翻译之 Connections

2018-08-22  本文已影响13人  黑泥卡

Connections

虽然您只提供URL,但OkHttp使用三种类型计划其与您的Web服务器的连接:URL,地址和路由。

URLs

除了作为Web上所有内容的通用,分散的命名方案之外,它们还指定了如何访问Web资源。

URLs 是抽象的:

它们也具体:每个URL标识一个特定的路径(如/ square / okhttp)和查询(如?q = sharks&lang = en)。每个Web服务器都托管许多URL。

Addresses

地址指定Web服务器(如github.com)以及连接到该服务器所需的所有静态配置:端口号,HTTPS设置和首选网络协议(如HTTP / 2或SPDY)。

URLs 共享相同地址也可以共享相同的底层TCP套接字连接。共享连接具有显着的性能优势:更低的延迟,更高的吞吐量(由于TCP慢启动)和节省的电池。OkHttp使用连接池,它自动重用HTTP / 1.x连接并多路复用HTTP / 2和SPDY连接。

在OkHttp中,地址的某些字段来自URL(方案,主机名,端口),其余字段来自OkHttpClient。

Routes

Routes 提供实际连接到Web服务器所需的动态信息 。特定IP地址(由DNS查询发现),确切的代理服务器(如果正在使用ProxySelector),具体版本的TLS协议(用于HTTPS连接)。

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

Connections

当您使用OkHttp请求 URL 时,这是 Connections 的作用:

  1. Connection 使用 URL 和配置的 OkHttpClient 来创建 address。address 指定我们将如何连接到Web服务器。
  2. Connection 尝试从连接池中取出具有该地址的连接。
  3. 如果在池中找不到连接,则会路由。这通常意味着发出 DNS 请求,获取服务器的IP地址。然后,如有必要,它会选择 TLS 版本和代理服务器。
  4. 如果 Connection 是新路由,则通过构建直接套接字连接,TLS 隧道连接(通过HTTP代理的HTTPS)或直接 TLS 连接。需要时,它会进行 TLS 握手。
  5. 发送HTTP请求并读取响应。

如果连接出现问题,OkHttp 将选择另一条路线并再尝试。这允许 OkHttp 在服务器地址子集的一条地址无法访问时,使用另一条进行恢复。当连接池的连接过时或者不支持当前的TLS版本时,它也非常有用。

收到响应后,连接将存储到连接池中,以便可以将其重新用于将来的请求。一段时间不活动后,该连接将被连接池去除。

Word List

上一篇 下一篇

猜你喜欢

热点阅读