高并发需求
性能和资源 空间换时间和时间换空间的问题不再讨论。高并发需求肯定消耗的资源是要多一些的。
先详读一下tcp,socket,http的概念和之间的联系。不然不好理解。
1.开启连接池
Registry<ConnectionSocketFactory> registry = registryBuilder.build();
connectionManager = new PoolingHttpClientConnectionManager(registry);
connectionManager.setMaxTotal(500);
connectionManager.setDefaultMaxPerRoute(50);//例如默认每路由最高50并发,具体依据业务来定
2.开启长连接,虽然默认也是,这样更保险一点。
myStrategy= new ConnectionKeepAliveStrategy() {
@Override
public long getKeepAliveDuration(HttpResponse response, HttpContext context) {
HeaderElementIterator it = new BasicHeaderElementIterator
(response.headerIterator(HTTP.CONN_KEEP_ALIVE));
while (it.hasNext()) {
HeaderElement he = it.nextElement();
String param = he.getName();
String value = he.getValue();
if (value != null && param.equalsIgnoreCase
("timeout")) {
return Long.parseLong(value) * 1000;
}
}
return 60 * 1000;//如果没有约定,则默认定义时长为60s
}
};
3.创建httpclient对象
httpClient = HttpClients.custom()
.setConnectionManager(connectionManager).setKeepAliveStrategy(myStrategy)
.setDefaultRequestConfig(RequestConfig.custom().setConnectTimeout(500)//建立连接过期时间
.setConnectionRequestTimeout(500)//请求过期时间
.setSocketTimeout(500).build())//socket过期时间
.build();