OkHttp3-连接(Connections)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OkHttp3-连接(Connections)相关的知识,希望对你有一定的参考价值。

参考技术A 虽然通常你只需要提供一个 URL 给OkHttp,OkHttp就可以帮你完成其他事情。但是实际上OkHttp连接服务器需要三个条件: URL , Address , Route 。

提供一个 URL (比如 https://github.com/square/okhttp )让Http去连接服务器是最基本的工作。还有一种渐渐普遍的文件定位方式称为 URN(同意名称定位符) ,它是利用一种分散式的命名方案去指定所需要访问的资源文件。
URLs 是抽象的:

URL 是具体的:

Address 在OKHttp中是一个对象,它为OkHttp提供静态配置!
地址指定了一个服务器(比如 github.com )以及连接此服务器所需要的静态配置:端口号, HTTPS 设置,以及指定的网络协议(比如 HTTP/2 或者 SPDY )。

相同地址的 URL 也可以共用相同的底层 TCP Socket 连接。共用相同的连接对于性能有很大的提升:更低的延迟,更大的吞吐量(复用连接,由于每个 TCP 启动的都需要较多的准备工作),更少的电能损耗。OkHttp使用一个连接池,来自动复用 HTTP/1.x connections 、 HTTP/2 、 SPDY 连接。

URL为地址提供了一些字段(比如域名、主机名、端口号),其他的字段都来自于 OkHttpClient 。

Routes 在OKHttp中是一个对象,它为OkHttp提供动态配置!
路由提供了实际连接到服务器所需要的动态配置。比如所指定用来尝试连接服务器的 IP 地址(从 DNS 服务商获得)、连接过程中实际所使用到的代理服务器(如果使用了 ProxySelector ),以及使用的是哪个版本的
TLS 协议(当使用 Https 协议连接时候需要)。

对于一个地址来说 ,可能存在有很多种路由的方式。比如,当一个服务器被托管在多个数据中心,这时路由从 DNS 供应商获取的响应中就可以获取到多个 IP 地址。

当你使用OkHttp去请求一个 URL 时,OkHttp为你做了如下事情:

如果在连接的过程中出现问题,那么OkHttp将会选择其他的路由进行重新连接。这意味着当一个服务器的某一个 IP 地址无法访问时,OkHttp可以尝试别的 IP 地址进行访问。或者当一个连接池过期或者你尝试连接的所用的 TLS 版本不受服务器支持时,这种重连机制也是非常有用的。

一旦客户端发来接收到来自服务器的响应,那么这个 Connection 将会被放置到连接池中以备于将来新的连接进行复用。 Connection 在长期不使用的情况下,将会从这个连接池中被移除。

··

springcloud feign配置

feign:
  httpclient:
    # feign最大连接数
    max-connections: 200
    # feign单个路径的最大连接数
    max-connections-per-route: 50
  okhttp:
    # 让feign使用Apache okhttp做请求,而不是默认的urlConnection
    enabled: true

以上是关于OkHttp3-连接(Connections)的主要内容,如果未能解决你的问题,请参考以下文章

阿里云服务器晚上运行定时任务报Too many connections

优化 Nginx 单个进程允许的最大连接数

[技术博客]OKhttp3使用get,post,delete,patch四种请求

[技术博客]OKhttp3使用get,post,delete,patch四种请求

mysql优化连接数

CentOS中设置Mysql的最大连接数max_connections(用于解决too many connections的问题)