“获取时超时” URLFetch GAE/J
Posted
技术标签:
【中文标题】“获取时超时” URLFetch GAE/J【英文标题】:"Timeout while fetching" URLFetch GAE/J 【发布时间】:2011-05-06 16:45:52 【问题描述】:我正在使用 XMLReader 来简单地阅读如下所示的提要。
URLConnection urlConnection = url.openConnection();
XmlReader reader = new XmlReader(urlConnection);
当这被调用时,我会在 5 秒内收到一个 IOException "Timeout 获取时”。所以我尝试将超时设置为最大值(10 秒),但仍然没有运气,5 秒后仍然是 IOExeption。
urlConnection.setConnectTimeout(10000);
(最大值在文档中说明:http://code.google.com/intl/nl-NL/appengine/docs/java/urlfetch/overview.html)
Feed 的大小似乎太大了。当我调用较小的提要时 它工作正常。有什么解决方法或解决方案吗?我需要能够调用更大的提要。
【问题讨论】:
【参考方案1】:您应该使用设置读取截止日期的setReadTimeout
方法:
urlConnection.setReadTimeout(10000); //10 Sec
您应该能够在 10 秒内下载更大的 Feed。 如果您仍然有问题,请尝试使用 this 不同的方法。
【讨论】:
感谢您的快速回复。我试过了,不幸的是还是一样的异常。似乎在 5 秒内完全没有响应。 @Ben 对我来说听起来很奇怪;例如,通过浏览器获取此提要需要多少秒? 大约需要 10 秒。在浏览器中(FireFox/Chrome/IE) @Ben 哇,那是脂肪饲料。如果服务器支持“范围请求”,您可以尝试异步获取较小的提要块;我不知道它是否适合这种数据。 我试试,谢谢。虽然,我仍然觉得很奇怪,超时时间不受 setConnectionTimeout 或 setReadTimeout 的影响。【参考方案2】:原因是:
如果在读取超时期间没有可用数据,则可以抛出异常。来自the doc of Oracle
如果在数据可供读取之前读取超时到期,则从返回的输入流读取时可能会引发 SocketTimeoutException。
顺便说一下,ReadTimeout
和ConnectTimeout
不同,读超时是从主机获取数据的超时时间,见different connection timeout and read timeout
所以作为@systempuntoout 的回答,需要设置读取超时。
【讨论】:
以上是关于“获取时超时” URLFetch GAE/J的主要内容,如果未能解决你的问题,请参考以下文章
Eclipse 需要哪些 JAR 文件才能使用 JSTL 才能最终在 GAE/J 上运行?
Jenkins 在 10 分钟内从 Github 获取时超时。