Java 如何在使用OkHttpClient和undertow web serverlet的springboot代理模拟器中并行启用多个tcp连接

Java 如何在使用OkHttpClient和undertow web serverlet的springboot代理模拟器中并行启用多个tcp连接,java,spring-boot,okhttp,undertow,Java,Spring Boot,Okhttp,Undertow,我在属性文件中也给出了这一点: @Bean UndertowServletWebServerFactory undertowServletWebServerFactory() { UndertowServletWebServerFactory factory = new UndertowServletWebServerFactory(); factory.addBuilderCustomizers( builder -> {

我在属性文件中也给出了这一点:

@Bean
UndertowServletWebServerFactory undertowServletWebServerFactory() {
    UndertowServletWebServerFactory factory = new UndertowServletWebServerFactory();
    factory.addBuilderCustomizers(
            builder -> {
                builder.setServerOption(UndertowOptions.ENABLE_HTTP2, true)
                        .setWorkerThreads(64)
                        .setIoThreads(25)
                        .setBufferSize(16384)
                        .setServerOption(UndertowOptions.HTTP2_SETTINGS_ENABLE_PUSH,true);
            });

    return factory;
}




@Bean
public okhttp3.OkHttpClient okHttpClient(@Value("${keypath}") String file,
        @Value("${keypassword}") String password) throws KeyStoreException, IOException,
        CertificateException, NoSuchAlgorithmException, KeyManagementException {

    
    KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType());
    try (FileInputStream instream = new FileInputStream(ResourceUtils.getFile(file))) {
        trustStore.load(instream, password.toCharArray());
    } catch (java.security.cert.CertificateException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }



    // X509TrustManager
    TrustManagerFactory trustManagerFactory = TrustManagerFactory
            .getInstance(TrustManagerFactory.getDefaultAlgorithm());
    trustManagerFactory.init(trustStore);
    TrustManager[] trustManagers = trustManagerFactory.getTrustManagers();
    X509TrustManager trustManager = (X509TrustManager) trustManagers[0];

    SSLContext sslContext = SSLContext.getInstance("TLSv1.2");
    sslContext.init(null, new TrustManager[] { trustManager }, null);
    
    SSLSocketFactory sslSocketFactory = sslContext.getSocketFactory();
    
    Dispatcher dispatcher = new Dispatcher(Executors.newFixedThreadPool(20));
    dispatcher.setMaxRequests(maxTotal);
    dispatcher.setMaxRequestsPerHost(maxPerRoute);
    
       OkHttpClient.Builder builder = new OkHttpClient.Builder().
               connectionPool(new ConnectionPool(100,15,TimeUnit.MINUTES)).
               dispatcher(dispatcher).
               protocols(Arrays.asList(Protocol.HTTP_2, Protocol.HTTP_1_1));
               builder.sslSocketFactory(sslSocketFactory, trustManager);
               builder.hostnameVerifier(new HostnameVerifier() {
            
          @Override
          public boolean verify(String hostname, SSLSession session) {
            return true;
          }
        });


        OkHttpClient okHttpClient = builder.build();
        
        return okHttpClient; 

}
  • OkHttp3版本:4.9.1
  • webserverlet:海底
尽管我在服务器端添加了工作线程和io线程,但5个或5个以下的连接只会被添加。此外,连接池和调度程序在这种情况下也没有多大帮助


我需要实现更多的TPS(每秒事务量)。

使用HTTP/2,您可能会在单个套接字上收到请求。因此,您可能希望在不共享连接池的多个客户端实例之间实现负载平衡。使用HTTP/1.1,您应该能够按照您所做的那样进行调优。查看结果,看看它是否在重用连接以及重用了多少连接。因此,无法使用http2进行多个连接?两个打开的功能请求@YuriSchimke是否可以在spring boot中将http2流打印为日志?数据帧大小、窗口更新以及所有内容?
server.undertow.worker-threads=64
server.undertow.io-threads=25