Connections
尽管你只提供了URL,OkHttp还是会使用3种方式连接到你的服务器:URL,Adress,和Route。
URL是抽象的:
-
它没有规定是否使用特别的代理服务器和怎么通过代理服务器的用户验证。
对于一个地址可能有很多Routes。例如一个服务器托管在多个数据中心在它的DNS响应中可能包含多个IP地址。
当你使用OkHttp访问一个URL时,OkHttp将做如下的事情:
- 使用URL,配置OkHttpClient来创建一个address,这个address规定了如何连接到服务器。
- 试图从连接池获取这个address的连接
- 如果在连接池中没有找到连接,选择一个route连接,这通常意味着通过DNS请求服务器的IP地址,在必要的情况下选择TLS版本和代理服务器。
- 如果这是一个新route,它既可以通过一个套接字直连,一个TLS通道(用于HTTP上的HTTPS代理)也可以通过TLS直连必要时进行TLS握手。
- 发送HTTP请求,获取响应。
如果在建立连接时遇到问题,OkHttp尝试选择另外一个route连接。OkHttp将释放服务器地址无法访问的连接。这对那些已经缓存的过时连接或者不支持的TLS版本同样起作用(将无效的连接释放)。
一旦接收response,连接就会被连接池收集用于接下来的连接(复用),连接池会释放闲置的连接。