【问题标题】:org.apache.http.client.HttpClient - one per request?org.apache.http.client.HttpClient - 每个请求一个?
【发布时间】:2013-04-06 17:42:20
【问题描述】:

我使用org.apache.http.client.HttpClient。我有一个关于使用这个类的问题。

我应该为每个请求创建一个新的HttpClient(例如,因为它是一个轻量对象)还是最好为每个 http 请求使用一个唯一实例(例如,因为创建/删除很昂贵)? 如果只需要使用HttpClient 的一个实例,那么HttpClient 线程是否安全(例如,它可以同时处理许多http 请求)或者在这种情况下最好创建一个HttpClients 池?

实际上,我为每个请求创建了一个新的 HttpClient。我怀疑我必须使用getConnectionManager().shutdown()创建一个唯一的实例,以便在我的应用程序使用结束时关闭,但我不知道我是否可以保持基于线程的并行性。

【问题讨论】:

  • 提示 - DefaultHttpClient 带有 @ThreadSafe 注释。
  • 哦,很好...所以我认为它应该每次处理多个 http 请求。
  • 是的。 More here。看看Reuse the HttpClient instance
  • 这适用于 v3.1。它适用于 v4 吗?
  • 然而,似乎对 v4 也是合理有效的。这是令人信服的!请发布我的问题的完整答案。

标签: java http connection apache-httpclient-4.x


【解决方案1】:

DefaultHttpClient 标有@ThreadSafe 注释,所以是的,您可以以线程安全的方式使用它。 HTTPClient 的性能文档还积极recommends 尽可能使用单个实例。

【讨论】:

  • 感谢您的耐心和详尽的回答。我要重新整理代码!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多