如何找到服务器提供的MAX_CONCURRENT_STREAMS值?

问题描述 投票:0回答:1

我正在使用 java.net.http 对服务器进行一些 http 调用。但是,有时我会从这里得到“太多并发流”异常:https://github.com/AdoptOpenJDK/openjdk-jdk11/blob/master/src/java.net.http/share/classes/jdk/internal /net/http/Http2Connection.java#L440.

看来我的客户端超出了服务器设置的

MAX_CONCURRENT_STREAMS
值。从其他来源来看,听起来我需要设置一个信号量以确保我不会超过该值。

问题是我不知道服务器的

MAX_CONCURRENT_STREAMS
值是多少。它似乎无法通过 java.net.http API 访问。

有人知道我如何找出服务器正在设置的

MAX_CONCURRENT_STREAMS
吗?

java http http2
1个回答
0
投票

不幸的是

java.net.http.HttpClient
没有公开服务器发送的
MAX_CONCURRENT_STREAMS
的值。

您可以尝试猜测,然后使用

Semaphore
来避免超过它,但作为
java.net.http.HttpClient
的用户,您不应该做很多工作。

[免责声明:我是 Jetty 维护者。]

您可以切换并使用 Jetty 的

HttpClient
,它不会遇到此问题,因为它会仔细处理
MAX_CONCURRENT_STREAMS
值,允许每个连接有多个并发请求,如果超过该值,则会为该连接打开一个新连接并发请求过多。

Jetty 的

HttpClient
还提供了比 JDK 的
HttpClient
更多的功能和配置选项,因此该开关可能会在其他方面为您提供帮助。

您可以在此处找到有关 Jetty

HttpClient
的文档: https://eclipse.dev/jetty/documentation/jetty-12/programming-guide/index.html#pg-client-http

© www.soinside.com 2019 - 2024. All rights reserved.