我试图在https服务上重复发出10个请求,我能够这样做,但我正在使用10个tcp连接。 我想重用为10个请求启动时创建的相同tcp连接,如何为下面的代码
执行此操作这里的客户端是javax.ws.rs.client
java代码:
.carousel-indicators li, .carousel-indicators li.active {
margin: 0px 7px !important;
}
答案 0 :(得分:2)
关于它的文章很好:Setting up jersey client 2.0 to use httpclient, timeouts, and max connections但实际上它已经过时了。当前泽西岛客户的样本:
static PoolingHttpClientConnectionManager connectionManager = new PoolingHttpClientConnectionManager();
static Client client;
static{
connectionManager.setMaxTotal(100);
connectionManager.setDefaultMaxPerRoute(10);
//you can provide per route settings
//connectionManager.setMaxPerRoute(new HttpRoute(new HttpHost("localhost")), 40);
SslConfigurator sslConfig = SslConfigurator.newInstance()
.securityProtocol("TLS")
.keyStoreFile("/path")
.keyStorePassword("password")
.keyStoreType("JKS")
.trustStoreFile("/path");
ClientConfig clientConfig = new ClientConfig();
clientConfig.property(ApacheClientProperties.CONNECTION_MANAGER, connectionManager);
clientConfig.connectorProvider(new ApacheConnectorProvider());
client = ClientBuilder.newBuilder().withConfig(clientConfig).sslContext(sslConfig.createSSLContext()).build();
}
此外,您应该致电response.close();
将连接标记为免费。
默认使用BasicHttpClientConnectionManager
。它有以下注意事项:此连接管理器将努力为具有相同HttpRoute路由的后续请求重用连接。但是,如果持久连接的路由与连接请求的路由不匹配,它将关闭现有连接并为给定路由打开
因此,在简单的情况下,默认情况下会重复使用连接。
答案 1 :(得分:1)
猜猜,但你可以试试这个:
Request req = (Request) client.target(target).path(path).request(MediaType.APPLICATION_JSON);
for (i = 0; i < 10; i++ {
Response response = req.post(
Entity.entity(jsonRequest.toString(), MediaType.APPLICATION_JSON));
}