6

我正在使用HttpClient带有 HTTP/2 的 Java 11,并且需要保持连接活动几分钟,但构建器没有设置它的选项。有没有办法指定这一点并使客户端保持连接一段时间?

4

2 回答 2

12

如果你构建一个标准的 HttpClient,例如HttpClient.newHttpClient();默认使用一个连接池。默认情况下,此池使连接保持活动状态 1200 秒(20 分钟)。

如果您想更改保持活动超时,您可以使用 property 来做到这一点jdk.httpclient.keepalive.timeout。但是,该值仅在jdk.internal.net.http.ConnectionPool加载类时读取一次。以后就不能再改了。

因此,您必须为整个 JVM 设置此属性:

-Djdk.httpclient.keepalive.timeout=99999

或者在ConnectionPool加载类之前的运行时:

System.setProperty("jdk.httpclient.keepalive.timeout", "99999");

第三种选择是使用名为的文件${java.home}/conf/net.properties并在其中设置属性。

于 2018-12-04T20:11:35.400 回答
1

默认情况下,HTTP/2 和 HTTP/1.1 连接都保持活动状态。当几个并发连接打开到同一个主机时会有一些例外 - 然后只有一个会保持活动状态。

于 2018-12-04T17:41:16.250 回答