频道栏目
首页 > 资讯 > 其他综合 > 正文

HttpClient 超时相关参数设置基本详情

17-11-11        来源:[db:作者]  
收藏   我要投稿
这里主要介绍HttpClient 4.5版本(区别于HttpClient 4.3 版本,参数又说不同)设置连接超时时间CloseableHttpClient。
超时的情况有三种:
(1)从连接池中获取可用连接超时(单位:毫秒)
HttpClient中的要用到连接时尝试从连接池中获取,若是在等待了一定的时间后还没有获取到可用的连接(比如连接池中没有空闲连接了),则会抛出获取连接超时异常。
(2)连接目标超时connectionTimeout(单位:毫秒)
指的是连接目标url的连接超时时间,即客户端发送请求到与目标url建立连接的最大时间。如果在该时间范围内还没有建立起连接,则就抛出connectionTimeout异常。
如:可以通过测试一个不存在的url,进行连接,则会抛出异常。
(3)等待响应超时(读取数据超时) socketTimeout (单位:毫秒)
即在于目标url建立连接后,等待返回response,在规定时间内没有返回响应数据的话就抛出SocketTimeOut。

超时连接代码示例:

public class TestHttpClient {
    public static void main(String[] args) throws IOException {
        final int MAX_CONN_TOTAL = 10;           // 连接池中的最大连接数
        final int MAX_CONN_PER_ROUTE = 10;       // 连接同一个route最大的并发数

        final int CONNECT_REQUEST_TIMEOUT = 100; // 从连接池中获取可用连接最大超时时间 单位:毫秒
        final int CONNECT_TIMEOUT = 100;         // 连接目标url最大超时 单位:毫秒
        final int SOCKET_TIMEOUT = 100;          // 等待响应(读数据)最大超时 单位:毫秒

        final String TEST_URL = "http://www.baidu.com";      // 存在的一个url
        final String TEST_URL_2 = "http://www.dddddddd.com"; // 不存在的url

        RequestConfig requestConfig = RequestConfig.custom()
                .setConnectionRequestTimeout(CONNECT_REQUEST_TIMEOUT) // 单位为毫秒
                .setConnectTimeout(CONNECT_TIMEOUT)
                .setSocketTimeout(SOCKET_TIMEOUT)
                .build();

        HttpClient httpClient = HttpClientBuilder.create().setMaxConnTotal(MAX_CONN_TOTAL) // 连接池中的最大连接数
                .setMaxConnPerRoute(MAX_CONN_PER_ROUTE) // 分配给同一个route最大的并发数
                .setDefaultRequestConfig(requestConfig)
                .build();

        HttpPost httpPost = new HttpPost(TEST_URL_2);

        HttpEntity entity = httpClient.execute(httpPost).getEntity();

        InputStream inputStream = null;
        String body = "";
        if (entity != null ){
            inputStream = entity.getContent();
            // 转换为字节输入流
            BufferedReader br = new BufferedReader(new InputStreamReader(inputStream, "utf-8"));
            String line = "";
            while ((line = br.readLine()) != null ) {
                body += line;
            }
        }
        System.out.println(body);
    }
}
补充知识点(另外两个HttpClient的参数设置):
(1)连接池中最大连接数 maxConnTotal
(2)单个路由最大连接数 maxConnPerRoute
路由(route):运行环境机器到目标机器的一条线路。单个路由最大连接数,即分配给同一个路由(route)最大的并发连接数。
相关TAG标签
上一篇:如何通过RecyclerView和okhttp结合实现一个网络请求数据
下一篇:如何使用Linux脚本一键快速搭建自己的IPsecVPN服务器?
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站