超时没有限制? - HttpsURLConnection

时间:2016-07-18 13:44:54

标签: java timeout limit httpurlconnection httpsurlconnection

在我的Java客户端应用程序中,我使用HttpsURLConnection连接到我的服务器。这一切都很好,除非在某些时刻它根本不会超时。我这样设置了连接的超时参数(到5000毫秒):

unique_lock

我捕获所有异常,但没有注册,所以问题不能成为未捕获的异常。连接根本不会超时。我等了3分钟,没有回应。在执行请求期间,我可以在切换网络时重现该错误几次。

此外,有时大约一分钟后会有回应。这比超时时间长。

我已经尝试在超时后中断发出请求的线程,断开HttpsURLConnection。但必须有一个更简洁的解决方案。我想知道这个无限期超时的来源。

有什么想法吗?

非常感谢!

1 个答案:

答案 0 :(得分:1)

来自我的评论

超时时抛出的异常应该是java.net.SocketTimeoutException,您应该已经抓住它,因为它不是运行时异常(无法在代码中看到您是如何做到这一点的)虽然)。

另请注意,来自API:

  

这种方法的一些非标准实施可能会忽略   指定超时。要查看连接超时设置,请致电   getConnectTimeout()

来自您的评论

  

的确,当我打印getConnectTimeout()结果时,我总是得到0   (无限的),无论我分配给它的是哪个值。所以,我们现在知道了   HttpsURLConnection有一个"非标准实施"的   setConnectTimeout()方法。但是我怎样才能限制无限   但是超时?

快速而丑陋的解决方案

  • &#34;环绕&#34;您的代码建立连接是通过将其移动到call覆盖Callable<String>(其参数化类型是我认为是result变量的类型)。
  • 从当前调用此主题的线程中,使用单线程Executor提交新的Callable<String>
  • 然后使用您选择的超时时间调用Future<String>上的get,并相应地处理TimeoutException

A(可能)更好,更长期的解决方案

  • 查看您正在处理的abstract class HttpsURLConnection的实施情况,看看是否存在错误/与实施它的人进行通信。