Java Jetty http2将打开到同一目的地的多个连接

Java Jetty http2将打开到同一目的地的多个连接,java,jetty,http2,jetty-9,jetty-8,Java,Jetty,Http2,Jetty 9,Jetty 8,我正在使用jetty客户端与启用了http2的服务器建立http2连接。我可以根据需要查看码头开口连接,并用于在端点之间交换数据。我的代码片段如下所示,用于创建http2客户端 Security.addProvider(new OpenSSLProvider()); SslContextFactory sslContextFactory = new SslContextFactory(true); sslContextFactory.setProvider("Conscrypt"); sslC

我正在使用jetty客户端与启用了http2的服务器建立http2连接。我可以根据需要查看码头开口连接,并用于在端点之间交换数据。我的代码片段如下所示,用于创建http2客户端

Security.addProvider(new OpenSSLProvider());
SslContextFactory sslContextFactory = new SslContextFactory(true);
sslContextFactory.setProvider("Conscrypt");

sslContextFactory.setProtocol("TLSv1.3");
HTTP2Client http2Client = new HTTP2Client();
http2Client.setMaxConcurrentPushedStreams(1000);
http2Client.setConnectTimeout(30);
http2Client.setIdleTimeout(5);

HttpClient httpClient = new org.eclipse.jetty.client.HttpClient(new HttpClientTransportOverHTTP2(http2Client), sslContextFactory);
httpClient.setMaxConnectionsPerDestination(20);
httpClient.setMaxRequestsQueuedPerDestination(100);
httpClient.start();
httpClient.addBean(sslContextFactory);
httpClient.start();
稍后,我使用上面创建的客户机交换http2请求,如

Request request = httpClient.POST("my url goes here");
request.header(HttpHeader.CONTENT_TYPE, "application/json");
request.content(new StringContentProvider("xmlRequest PayLoad goes here","utf-8"));
ContentResponse response = request.send();
String res = new String(response.getContent());
我的要求是,将有100个请求同时多路传输到同一个目的地。它会更快,直到负载减少,但当负载开始增加时,处理请求所需的时间也开始增加(有时是10倍)

在这种情况下,我希望强制jetty客户端打开多个tcp连接,并将负载分配到不同的套接字,而不是将所有内容压缩到同一个打开的套接字。我已经用不同的值尝试了以下设置

httpClient.setMaxConnectionsPerDestination(20);
httpClient.setMaxRequestsQueuedPerDestination(100);
没有运气

当码头中有多个连接件打开时,码头连接件是否合并?是否有办法打开多个tcp连接并分配负载,以便在峰值负载时间处理时间不受影响

码头-9.4.15, 提供商-Conscypt, JDK-JDK.18, 操作系统-Ubuntu/Centos


提前感谢

Jetty的
HttpClient
配置了HTTP/2传输,当超过并发流的数量时,它将根据需要打开连接,这是一个服务器端配置参数

例如,假设您已配置了
max\u concurrent\u streams=1024
,则必须在
HttpClient
打开新连接之前将客户端推送到1024个并发请求之外

有时大型
max\u并发\u流
永远无法被客户端访问(例如,客户端比服务器慢),因此永远不会打开其他连接

如果要强制打开多个连接,必须使用服务器端配置的
max\u concurrent\u streams
,并将其减少。
之后,您可以通过限制
maxConnectionsPerDestination
maxRequestsQueuedPerDestination

什么确切的Jetty版本?Jetty 9.x,最新的一个,我从MVN中央回购公司下载了2个星期,所有的依赖性都是平价的,但是为什么当并行请求的数量增加到同一个主机时,所有并行请求的处理时间都会增加?比如说,30岁或40岁的人有同样的命运,没有证据很难说。我们有人用HTTP/2管理成千上万的请求/秒,所以你的30/40对Jetty来说真的不算什么。这可能是由于错误的线程池配置、错误的流控制配置、客户端未处理负载或其他数百个原因造成的。欢迎您打开,附上您的代码和调试日志,我们可以详细讨论会发生什么。感谢sbordet,但是1000秒中的10秒GET请求可以正常工作,但是如果它是一个POST请求,每个请求的有效负载大约为1000B,并且对这些请求进行过多的多路复用会减慢每个请求的处理时间。我还怀疑Tomcat(服务器端)是否因为某种原因限制了多执行post请求,如果它的负载大于1000B。在开始一个不必要的问题之前,让我做更多的分析。