Быстрый способ проверить, если страница онлайн - PullRequest
0 голосов
/ 23 февраля 2011

Я использую 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 Ответ

2 голосов
/ 24 февраля 2011

Для проверок на уровне, указанном в вашем коде, вам понадобится сотрудничество с удаленной службой, например, условные запросы HEAD и / или сравнение Etag (они вместе были бы моими собственными предпочтениями). Похоже, у вас могут быть некоторые изэто, как вы говорите, иногда возвращает коды ошибок, хотя, если эти коды ошибок находятся в полезной нагрузке XML, они не помогут, и, конечно, если отзывчивость удаленной службы является переменной, она, вероятно, будет колебаться между вашей проверкой и последующим основным GETзапрос.

FWIW: если вы просто хотите улучшить отзывчивость вашего приложения при использовании этих данных, есть подходы кеша, которые вы можете использовать, например, использовать soft-TTL ниже, чем основной TTL, что, когда истек срок действия, вызываетВаш кеш-код возвращает кешированный XML и запускает асинхронное задание для повторного получения данных, чтобы он был более свежим для следующего запроса.Или используйте повторяющийся рабочий, чтобы сохранить кеш свежим.

...