gpt4 book ai didi

java - Apache HttpClient - ConnectionTimeout 和 SoTimeout

转载 作者:太空宇宙 更新时间:2023-11-04 12:06:55 26 4
gpt4 key购买 nike

Apache HttpClient 允许配置两种超时:ConnectionTimeoutSoTimeout

这就是人们通常创建通用 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:连接到 example.com 超时 - 如果无法建立底层 TCP 连接

  • 此外,它还可能抛出org.apache.http.conn.ConnectionPoolTimeoutException:WAITING池中的连接超时 - 当连接池已满并且在这段时间内无法从池中获取新连接时

我有两个问题:

1) 这两个实际上不同的超时组合在单个 ConnectionTimeout 参数下是否有原因。 例如,无法等待池中的可用连接 10 秒,但将套接字连接超时保持为 1 秒

2) 对于通用场景,ConnectionTimeout 和 SoTimeout 的建议值是多少?

最佳答案

  1. 因为这就是他们的设计方式。知道为什么不会改变你的生活。
  2. 10 秒足以实现连接超时。读取超时值完全取决于预期的服务时间。您需要将其设置得足够高以允许负载峰值,但又足够低以使其有用。如果您有此类统计数据,您可以将其设置为预期服务时间的两倍,或者比其高两到三个标准差。

关于java - Apache HttpClient - ConnectionTimeout 和 SoTimeout,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40268616/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com