我的应用程序将向我的 tomcat 服务器(启用了 http/2)发送大约 1000 个 POST 请求/分钟,它将轮询给定的 url 并返回 html 和响应时间,我想实现真正的 http/2 多路复用以重用 tcp 连接在我的应用程序和 tomcat 服务器之间。我的客户端使用okhttp,我可以成功建立连接并长时间重用它,但是当请求计数增加(例如,排队:50,运行:50)时,响应时间也会增加(它飙升至2000ms- 15000ms 或更糟,通常需要 300ms-500ms)。我可以理解发生这种情况是因为 tcp 连接过载太多请求,所以我决定打开多个 tcp 连接并允许它跨 tcp 连接分配请求负载。我强制客户端使用以下命令打开多个连接
Dispatcher dispatcher = new Dispatcher();
dispatcher.setMaxRequests(100);
dispatcher.setMaxRequestsPerHost(5);
ConnectionPool cp = new ConnectionPool(5, 5, TimeUnit.MINUTES);
Run Code Online (Sandbox Code Playgroud)
在wireshark的帮助下,我可以看到打开了5个连接,还看到第一次握手成功后立即关闭了4个请求,我不知道这是否是http/2多路复用的预期行为。
如果这是预期的行为,我如何优化它以减少峰值负载时每个请求的响应时间?
或者是否可以使用多个连接在峰值负载时间分配负载?
我的示例程序如下,
Security.insertProviderAt(Conscrypt.newProvider(), 1);
sslContext = SSLContext.getInstance("TLSv1.3");
sslContext.init(null, new TrustManager[] {
new X509TrustManager() {
@Override
public void checkClientTrusted(java.security.cert.X509Certificate[] chain, String authType) throws CertificateException {
}
@Override
public void checkServerTrusted(java.security.cert.X509Certificate[] chain, String authType) throws CertificateException {
}
@Override …Run Code Online (Sandbox Code Playgroud)