首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Apache HttpClient - ConnectionTimeout和SoTimeout

Apache HttpClient - ConnectionTimeout和SoTimeout
EN

Stack Overflow用户
提问于 2016-10-26 17:29:36
回答 1查看 1.5K关注 0票数 1

Apache ConnectionTimeout允许配置两个超时:SoTimeout和HttpClient。

人们通常是这样创建一个通用HttpClient实例的:

代码语言:javascript
复制
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 param很棘手,它包含两个scenarious:

  • 如果HttpClient无法建立底层TCP连接,它可能会抛出org.apache.http.conn.ConnectTimeoutException: Connect to example.com timed out -
  • 此外,当连接池已满且无法在这段时间内从池获得新连接时,可能会引发org.apache.http.conn.ConnectionPoolTimeoutException: Timeout waiting for connection from pool -()。

关于这一点我有两个问题:

( 1)这两个不同的超时在单个ConnectionTimeout参数下合并的原因是否存在?

例如,没有办法在10秒内等待池中的可用连接,但要将套接字连接超时保持在1秒以内。

2)一般情况下ConnectionTimeout和SoTimeout的推荐值是什么?

EN

回答 1

Stack Overflow用户

发布于 2016-10-26 19:54:36

  1. 因为他们就是这样设计的。知道为什么改变不了你的生活。
  2. 10s就足以进行连接超时。读取超时值完全取决于预期的服务时间。您需要将其设置得足够高,以便允许加载尖峰,但设置得足够低,以便有用。您可以将其设置为预期服务时间的两倍,或者,如果您有此类统计数据,则可以将其设置为高于预期服务时间的两到三个标准差。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40268616

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档