使用连接池的好处
大家都知道http连接是基于tcp的,而tcp创建连接需要三次握手,断开连接四次挥手,如果我们不使用连接池,那么每发出一个请求,就需要三次握手和四次挥手,而三次握手和四次挥手都是耗资源的操作。试想如果频繁的发出请求,性能是不是会是个瓶颈。所以HttpClient在4之后就出现了连接池的概念,当请求结束并不是直接断开连接,而是返回给连接池方便下次调用。
代码示例
private static PoolingHttpClientConnectionManager clientConnectionManager=null;
private static CloseableHttpClient httpClient=null;
private static RequestConfig config = RequestConfig.custom().setCookieSpec(CookieSpecs.STANDARD_STRICT).build();
private final static Object syncLock = new Object();
/**
* 创建httpclient连接池并初始化
*/
@PostConstruct
private void init(){
try {
//添加对https的支持,该sslContext没有加载客户端证书
// 如果需要加载客户端证书,请使用如下sslContext,其中KEYSTORE_FILE和KEYSTORE_PASSWORD分别是你的证书路径和证书密码
//KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType()
//FileInputStream instream = new FileInputStream(new File(KEYSTORE_FILE));
//keyStore.load(instream, KEYSTORE_PASSWORD.toCharArray());
//SSLContext sslContext = SSLContexts.custom().loadKeyMaterial(keyStore,KEYSTORE_PASSWORD.toCharArray())
// .loadTrustMaterial(null, new TrustSelfSignedStrategy())
//.build();
SSLContext sslContext = SSLContex