2011-02-23 64 views
0

我使用Nokogiri来解析XML检查页面是否在线的快速方法

问题在于外部资源的响应时间。有时它工作正常。有时回复时间可能会超过30秒。有时会返回不同的错误代码。我需要的是找出最快的方法来知道我的XML是否已准备好被open-uri请求。只有这样才能做出实际的要求。

我现在正在做的是将超时设置为5秒以防止延迟。

begin 
    Timeout::timeout(5) do 
    link = URI.escape("http://domain.org/timetable.xml") 
    @doc = Nokogiri::HTML(open(link)) 
    end 
rescue Timeout::Error 
    @error = "Data Server is offline" 
end 
+0

如果服务正在运行,但需要30秒,您是否认为“准备好要求”或未准备好? (也许明确定义你的准备状态。) – 2011-02-23 21:37:08

+0

技术上是的。但是不可能知道我的响应需要多长时间 – fl00r 2011-02-23 21:52:18

回答

2

为了检查你的代码显示,你需要从远程服务,例如,有条件的HEAD请求和/或Etag的比较(那些在一起将是我自己的选择。)合作,它看起来像你的水平可能会有这样的一些,正如你所说的那样,它有时会返回错误代码,但如果这些错误代码在XML有效载荷中,他们不会提供帮助,当然,如果远程服务的响应性是可变的,它可能会在您的支票和随后的主要GET请求。如果您只是希望在使用此数据时提高应用程序的响应能力,则可以使用缓存方法,例如,使用低于主TTL的soft-TTL,过期时会导致缓存代码来返回缓存的XML并启动异步作业来重新获取数据,以便下一个请求更新鲜。或者使用重复的工作人员来保持缓存新鲜。

+0

我无法配置外部服务器。而我正在使用缓存:)。在我的情况下,这非常有帮助 – fl00r 2011-02-23 21:55:39

相关问题