HttpClient实战:连接池设置

一 为什么 HttpClient 需要连接池

       一次创建连接是一次 TCP 进行三次握手的操作,一次销毁连接是一次 TCP 进行四次挥手的操作。采用连接池技术管理连接,连接可以得到复用,能给减少在创建连接和销毁连接所花的时间,减少服务器资源的消耗,能够达到较高的并发。

二 HttpClient 连接池的配置

public class HttpClientUtils {
    //  客户端从服务端读取数据的超时时间
    private static final int HTTP_TIMEOUT = 500;
    //  客户端与服务器建立连接的超时时间
    private static final int HTTP_CON_TIMEOUT = 200;
    //  客户端从连接池中获取连接的超时时间
    private static final int HTTP_CON_REQ_TIMEOUT = 100;
    //  路由的默认最大连接
    private static final int HTTP_MAX_PERROUTE = 500;
    //  整个连接池连接的最大值
    private static final int HTTP_MAX_TOTAL = 1000;
    private static RequestConfig defaultRequestConfig = null;
    private static CloseableHttpClient httpClient = null;

    static {
        //  创建连接池管理器
        PoolingHttpClientConnectionManager connManager = new PoolingHttpClientConnectionManager();
        //  设置socket配置
        SocketConfig socketConfig = SocketConfig.custom()
                .setTcpNoDelay(true)
                .build();
        connManager.setDefaultSocketConfig(socketConfig);
        connManager.setMaxTotal(HTTP_MAX_TOTAL);
        connManager.setDefaultMaxPerRoute(HTTP_MAX_PERROUTE);
        //  设置获取连接超时时间、建立连接超时时间、从服务端读取数据的超时时间
        defaultRequestConfig = RequestConfig.custom()
                .setSocketTimeout(HTTP_TIMEOUT)
                .setConnectTimeout(HTTP_CON_TIMEOUT)
                .setConnectionRequestTimeout(HTTP_CON_REQ_TIMEOUT)
                .build();
        //  创建httpclient实例
        httpClient = HttpClients.custom()
                .setConnectionManager(connManager)
                .setDefaultRequestConfig(defaultRequestConfig)
                .build();
    }
}

 

你可能感兴趣的:(工作总结)