在URL连接中设置超时 - 强制服务器以类似于httpurlconnection.setReadTimeout()的方法



根据此答案,方法HttpURLConnection.setReadTimeout()允许您设置最大的时间等待服务器到 strong> start 从输入流读取数据 - 如前所述。Oracle:

从返回的阅读中可以抛出sockettimeoutexception 输入流如果读取超时到期,则可以使用数据。 阅读。

它不允许您设置超时以将服务器强制到完成在特定时间内读取数据

我的问题是:

是否有一种方法可以设置超时迫使服务器在指定的时间内完成读取数据,或者根本不可能?

谢谢

您无法根据您的要求,在HttpURLConnection上设置timeout
但是,您可以使用单独的Thread来减轻情况。

获得ExecutoreService

final ExecutorService executor = Executors.newSingleThreadExecutor();

提交您的Callable<T>任务,其中T是从HttpURLConnection数据流阅读后返回的数据类型。

final Future<T> result = executor.submit(new HttpTask());

您将获得一个Future<T>,代表您的任务结果。
现在,使用Future#get(long timeout, TimeUnit unit)方法。

try {
   final T value = result.get(10, TimeUnit.SECONDS);
} catch (final TimeoutException e) {
   result.cancel(true);
}

在这种情况下,如果超过10秒的过去,将抛出TimeoutException,您将可以突然结束任务。

相关内容

  • 没有找到相关文章

最新更新