快速检查页面是否在线的方法

时间:2011-02-23 20:56:49

标签: ruby-on-rails ruby xml nokogiri

我正在使用Nokogiri来解析XML

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

我现在正在做的是将Timeout设置为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

1 个答案:

答案 0 :(得分:2)

对于您的代码显示的级别的检查,您需要来自远程服务的合作,例如,有条件的HEAD请求和/或Etag比较(这些将是我自己的偏好。)看起来您可能有一些这就像你说它有时返回错误代码,但如果这些错误代码在XML有效载荷中它们将无法提供帮助,当然,如果远程服务的响应性是可变的,它可能会在你的检查和随后的主要GET之间波动请求。

FWIW:如果您只是想在使用此数据时提高应用程序的响应能力,可以使用缓存方法,例如,使用低于主TTL的软TTL,当过期时,会导致缓存代码返回缓存的XML并启动异步作业以重新获取数据,以便下一个请求更新鲜。或者使用重复工作程序来保持缓存新鲜。