Apache HttpClient允许配置两个超时: ConnectionTimeout
和 SoTimeout
这是人们通常创建通用HttpClient实例的方式:
PoolingClientConnectionManager conman = new PoolingClientConnectionManager();
conman.setMaxTotal(200);
conman.setDefaultMaxPerRoute(100);
HttpClient httpClient = new DefaultHttpClient(conman);
HttpConnectionParams.setConnectionTimeout(httpClient.getParams(), 1000);
HttpConnectionParams.setSoTimeout(httpClient.getParams(), 1000);
ConnectionTimeout
参数很棘手,它涵盖了两个方面:
HttpClient可能会抛出org.apache.http.conn.ConnectTimeoutException: Connect to example.com timed out
- ,如果它无法建立基础TCP连接
当连接池已满并且在这段时间内无法从池中获取新连接时,它可能会抛出org.apache.http.conn.ConnectionPoolTimeoutException: Timeout waiting for connection from pool
- < / p>
我有两个问题:
1)是否有理由将这两个实际上不同的超时组合在单ConnectionTimeout
个参数下
例如,没有办法等待池中的可用连接10秒,但保持socket-connection-timeout为1秒
2)通用场景的ConnectionTimeout和SoTimeout的推荐值是什么?
答案 0 :(得分:0)