gpt4 book ai didi

java - Jetty http2 打开到同一目的地的多个连接

转载 作者:行者123 更新时间:2023-12-02 01:37:38 25 4
gpt4 key购买 nike

我正在使用 jetty 客户端与启用了 http2 的服务器建立 http2 连接。我可以看到 jetty 根据需要打开连接并用于在端点之间交换数据。我的代码片段用于创建 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());

我的要求是,将有数百个请求同时复用到同一目的地。在负载减少之前它会更快,但是当负载开始增加时,处理请求所需的时间也开始增加(有时 10 倍)。

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

httpClient.setMaxConnectionsPerDestination(20);
httpClient.setMaxRequestsQueuedPerDestination(100);

运气不好。

当jetty中打开多个连接时,jetty是否会合并连接?有没有办法打开多个 tcp 连接并分配负载,以便在高峰负载时间处理时间不受影响。

jetty - 9.4.15,提供者 - Conscypt,JDK-jdk.18,操作系统- Ubuntu/Centos

提前致谢

最佳答案

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

例如,假设您已配置 max_concurrent_streams=1024,则在 HttpClient 打开新的请求之前,您必须将客户端推送到超过 1024 个并发 个请求连接。

有时,客户端永远无法达到较大的 max_concurrent_streams(例如,客户端比服务器慢),因此永远不会打开其他连接。

如果你想强制打开多个连接,你必须使用max_concurrent_streams,这是一个服务器端配置,并减少它。之后,您可以使用客户端配置来通过限制 maxConnectionsPerDestinationmaxRequestsQueuedPerDestination 来限制客户端。

关于java - Jetty http2 打开到同一目的地的多个连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54985623/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com