如何解决如何在使用 OkHttpClient 和 undertow web-serverlet 的 springboot 代理模拟器中并行启用多个 tcp 连接
report_date customer_id loan_id Overdue_Amount Loan_Balance Flag_1
01/01/20 1 12 125000 0 0
02/01/20 1 12 125000 0 1
03/01/20 1 12 0 125000 1
04/01/20 1 13 0 125000 0
05/01/20 1 13 0 125000 0
01/01/20 2 111 0 0 0
02/01/20 2 111 6000 0 1
03/01/20 2 111 0 6000 1
04/01/20 2 112 0 6000 0
01/01/20 3 131 165878 0 0
02/01/20 3 131 165878 0 1
03/01/20 3 131 0 165878 1
04/01/20 3 132 9000 10000 0
05/01/20 3 132 9000 10000 0
06/01/20 3 132 9000 10000 0
07/01/20 3 132 9000 10000 0
@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:Undertow
即使我在服务器端添加了工作线程和 io 线程,但只有 5 个或以下 5 个连接才被添加。此外,连接池和调度程序在这种情况下也没有太大帮助。
我需要达到更高的 TPS(每秒交易数)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。