【问题标题】:HttpClient executeMethod throws java.net.SocketException: Connection resetHttpClient executeMethod 抛出 java.net.SocketException:连接重置
【发布时间】:2016-09-29 05:44:40
【问题描述】:

我有一个 java 程序,它创建多个线程,每个线程都发出 POST 请求。它在大多数情况下都可以正常工作,但在重负载下会引发连接重置异常。例如,当我同时发出 40 个请求时,有几次我得到连接重置异常。

Caught: java.net.SocketException: Connection reset
java.net.SocketException: Connection reset
   at java.net.SocketInputStream.read(SocketInputStream.java:168)
   at java.io.BufferedInputStream.fill(BufferedInputStream.java:218)
   at java.io.BufferedInputStream.read(BufferedInputStream.java:237)
   at org.apache.commons.httpclient.HttpParser.readRawLine(HttpParser.java:
   at org.apache.commons.httpclient.HttpParser.readLine(HttpParser.java:105
   at org.apache.commons.httpclient.HttpConnection.readLine(HttpConnection.
   at org.apache.commons.httpclient.HttpMethodBase.readStatusLine(HttpMetho
   at org.apache.commons.httpclient.HttpMethodBase.readResponse(HttpMethodB
   at org.apache.commons.httpclient.HttpMethodBase.execute(HttpMethodBase.j
   at org.apache.commons.httpclient.HttpMethodDirector.executeWithRetry(Htt
   at org.apache.commons.httpclient.HttpMethodDirector.executeMethod(HttpMe
   at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.jav
   at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.jav

在我的 Java 代码中,我正在创建一个 HttpClient 实例

HttpClient client = new HttpClient();

当我发出一个请求等待它完成然后发出另一个请求时,问题不会发生。但是,当我将程序转换为多线程时,我遇到了这个问题。

谁能指出我怎样才能防止这个异常,然后重试。从谷歌,我发现答案可能是使用

org.apache.commons.httpclient.util.IdleConnectionTimeoutThread 

我正在尝试同时使用它,但欢迎任何其他建议。

【问题讨论】:

  • 是否有任何日志服务器端可以为您提供关于为什么会发生这种情况的线索?

标签: java multithreading apache-commons-httpclient


【解决方案1】:

如果您使用的是 HttpClient 3,我建议使用 MultiThreadedHttpConnectionManager;如果您使用的是 HttpClient 4,我建议使用 PoolingHttpClientConnectionManager

我相当有信心 HttpClient 3 和 HttpClient 4 的默认连接管理器只期望单线程访问。

【讨论】:

  • 谢谢。我将其更改为使用 MultiThreadedHttpConnectionManager 并解决了连接重置的问题。我想为你的答案投票,但不幸的是我没有 15 名声望。
  • 我认为您应该能够接受答案。很高兴它成功了。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-20
  • 2010-09-08
  • 2021-03-10
相关资源
最近更新 更多