【发布时间】:2013-03-30 06:47:41
【问题描述】:
在我们的网络应用程序中,用户可以提交一个 url。我们将获取数据并在服务器端解析它。对于每个请求,我们使用具有以下(相关)设置的 HttpClient
connectionManager.getParams().setConnectionTimeout(10000);
connectionManager.getParams().setSoTimeout(10000);
当我调用 HttpMethod.getResponseBody 时,状态代码已被检查为可接受。此时线程挂起这个堆栈跟踪:
java.net.SocketInputStream.socketRead0 ( native code )
java.net.SocketInputStream.read ( SocketInputStream.java:150 )
java.net.SocketInputStream.read ( SocketInputStream.java:121 )
java.io.BufferedInputStream.read1 ( BufferedInputStream.java:273 )
java.io.BufferedInputStream.read ( BufferedInputStream.java:334 )
java.io.FilterInputStream.read ( FilterInputStream.java:133 )
org.apache.commons.httpclient.AutoCloseInputStream.read ( AutoCloseInputStream.java:108 )
java.io.FilterInputStream.read ( FilterInputStream.java:107 )
org.apache.commons.httpclient.AutoCloseInputStream.read ( AutoCloseInputStream.java:127 )
org.apache.commons.httpclient.HttpMethodBase.getResponseBody ( HttpMethodBase.java:690 )
我无法找到发生这种情况的确切 URL(是在现场环境中发生的事件),并且我无法重现它。我想这只是我们连接的服务器行为异常的问题,但也许我错过了一些东西。在任何一种情况下,我有没有办法防止阻塞方法调用永远等待? SoTimeout 也是套接字读取超时?我还缺少其他设置吗?
【问题讨论】:
标签: java sockets timeout httpclient