HTTP超时含义:connectionRequestTimeout 、connectionTimeout、socketTimeout代表意义

一.实现功能

解释三者的connectionRequestTimeout 、connectionTimeout、socketTimeout代表意义,进而了解三者的区别.

二.具体区别

1.connectionRequestTimout(单位是ms):指从连接池获取连接的timeout超出预设时间(

从连接池获取连接的超时时间,如果连接池里连接都被用了,且超过设定时间,就会报错connectionrequesttimeout,会抛出超时异常.

2.connetionTimeout(单位是ms):指客户端和服务器建立连接的timeout.

就是http请求的三个阶段,一:建立连接;二:数据传送;三,断开连接。如果与服务器(这里指数据库)请求建立连接的时间超过ConnectionTimeOut,就会抛 ConnectionTimeOutException,即服务器连接超时,没有在规定的时间内建立连接。

3.socketTimeout(单位是ms):指客户端从服务器读取数据的timeout超出预期设定时间,超出后会抛出SocketTimeOutException.

4.源码实例

public class RequestConfig implements Cloneable {

    /**
     * Returns the timeout in milliseconds used when requesting a connection
     * from the connection manager. A timeout value of zero is interpreted
     * as an infinite timeout.
     * <p>
     * A timeout value of zero is interpreted as an infinite timeout.
     * A negative value is interpreted as undefined (system default).
     * </p>
     * <p>
     * Default: {@code -1}
     * </p>
     */
    public int getConnectionRequestTimeout() {
        return connectionRequestTimeout;
    }

    /**
     * Determines the timeout in milliseconds until a connection is established.
     * A timeout value of zero is interpreted as an infinite timeout.
     * <p>
     * A timeout value of zero is interpreted as an infinite timeout.
     * A negative value is interpreted as undefined (system default).
     * </p>
     * <p>
     * Default: {@code -1}
     * </p>
     */
    public int getConnectTimeout() {
        return connectTimeout;
    }

    /**
     * Defines the socket timeout ({@code SO_TIMEOUT}) in milliseconds,
     * which is the timeout for waiting for data  or, put differently,
     * a maximum period inactivity between two consecutive data packets).
     * <p>
     * A timeout value of zero is interpreted as an infinite timeout.
     * A negative value is interpreted as undefined (system default).
     * </p>
     * <p>
     * Default: {@code -1}
     * </p>
     */
    public int getSocketTimeout() {
        return socketTimeout;
    }
}

三.代码实例

RequestConfig requestConfig = RequestConfig.custom().setConnectionRequestTimeout(5000).setConnectTimeout(5000).setSocketTimeout(30000)
.build();

具体写法:

private static final PoolingHttpClientConnectionManager POOL_CONN_MANAGER =
      new PoolingHttpClientConnectionManager();
private static final RequestConfig REQ_CFG;   

POOL_CONN_MANAGER.setMaxTotal(500);
POOL_CONN_MANAGER.setDefaultMaxPerRoute(POOL_CONN_MANAGER.getMaxTotal());

REQ_CFG =
        RequestConfig.custom()
            // 请求连接超时时间
            .setConnectTimeout(100 * 1000)
            // 获取数据超时时间
            .setSocketTimeout(360 * 1000)
            // 从链接池获取连接超时时间
            .setConnectionRequestTimeout(5000)
            .build();


CloseableHttpClient client=HttpClients.custom()
        .setConnectionManager(POOL_CONN_MANAGER)
        .setDefaultRequestConfig(REQ_CFG)
        .build();

 

四.参考:

1.https://zhidao.baidu.com/question/371321784407210444.html

 

  • 6
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值