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