如何在Java11HTTP客户端中保持连接活动

如何在Java11HTTP客户端中保持连接活动,java,http2,java-11,java-http-client,Java,Http2,Java 11,Java Http Client,我将Java11HttpClient与HTTP/2一起使用,需要将连接保持活动状态几分钟,但构建器没有设置它的选项。是否有办法指定此选项并使客户端将连接保持活动状态一段时间?默认情况下,HTTP/2和HTTP/1.1连接都保持活动状态。当多个并发连接打开到同一主机时,会出现一些例外情况,只有其中一个会保持活动状态。如果您构建标准的HttpClient,例如使用HttpClient.newHttpClient()默认情况下会创建一个连接池。默认情况下,此池使连接保持活动状态达1200秒(20分钟)

我将Java11
HttpClient
与HTTP/2一起使用,需要将连接保持活动状态几分钟,但构建器没有设置它的选项。是否有办法指定此选项并使客户端将连接保持活动状态一段时间?

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

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

如果要更改保持活动超时,可以使用属性
jdk.httpclient.keepalive.timeout
进行更改。但是,当加载类
jdk.internal.net.http.ConnectionPool
时,该值只读取一次。之后就不能再改变了

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

-Djdk.httpclient.keepalive.timeout=99999
或者在加载
连接池
类之前的运行时:

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

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

是的,这就是我需要的。有没有办法配置池大小?默认超时20分钟是可以的。@qiGuar使用属性
jdk.httpclient.connectionPoolSize
默认情况下此属性是
0
(未绑定)让我试试!所以,如果它是未绑定的,这意味着它将在每个请求上创建新的连接?此外,是否有此信息的文档链接?非常感谢你的回答!噢,该池仅用于http 1.1,而不用于http 2:(@Shubham It is“documented”from source:你怎么知道是这样的?这是可配置的,还是在某个地方记录的?@Lilitutos27 from:“如果收到的协议是http/1.1(或更高版本),则连接将在当前响应后保持…”[在没有连接的情况下:关闭标题]