【问题标题】:"Timeout while fetching" URLFetch GAE/J“获取时超时” 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 的大小似乎太大了。当我调用较小的提要时 它工作正常。有什么解决方法或解决方案吗?我需要能够调用更大的提要。

【问题讨论】:

    标签: java google-app-engine


    【解决方案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。

    顺便说一下,ReadTimeoutConnectTimeout不同,读超时是从主机获取数据的超时时间,见different connection timeout and read timeout

    所以作为@systempuntoout 的回答,需要设置读取超时。

    【讨论】:

      猜你喜欢
      • 2012-10-30
      • 2014-03-09
      • 2013-02-26
      • 2011-07-18
      • 2013-01-24
      • 1970-01-01
      • 2020-04-15
      • 2012-01-12
      • 2013-11-15
      相关资源
      最近更新 更多