在URL连接中设置超时 - 强制服务器使用与HttpURLConnection.setReadTimeout()类似的方法完成读取数据

问题描述 投票:0回答:1

根据this answer,方法HttpURLConnection.setReadTimeout()允许您设置等待服务器从输入流中读取数据的最大时间 - 如Oracle所述:

如果读取超时在数据可用于读取之前到期,则在从返回的输入流读取时可以抛出SocketTimeoutException。

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

我的问题是:

有没有办法设置超时以强制服务器在指定的时间内完成读取数据,或者这根本不可能?

谢谢

java connection timeout httpurlconnection
1个回答
0
投票

根据您的要求,您不能在timeout上设置HttpURLConnection。 但是,您可以使用单独的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,你将能够突然结束你的任务。

© www.soinside.com 2019 - 2024. All rights reserved.