EventMachine/em-http-request Обнаружение приостановки подключения к HTTP-потоку

Я использую EventMachine + em-http-request для запроса потокового API Twitter. Он работает отлично, но теперь я хотел бы получить защиту от ошибок.

Что было бы лучшим способом обнаружить, что соединение застопорилось? (чтобы попробовать автоматическое переподключение).

У меня есть временное решение: каждый раз, когда я получаю новый фрагмент из метода потока, я сохраняю текущую метку времени. PeriodicTimer проверяет эту временную метку и выполняет переподключение всякий раз, когда последняя временная метка старше 30 секунд. Проблема с этим решением заключается в том, что оно не делает разницы между зависшим соединением и рабочим соединением без содержимого.

Спасибо за вашу помощь.


person Chris    schedule 31.01.2012    source источник
comment
Поскольку вы используете http, который использует TCP-соединения, вы должны быть уведомлены, когда происходит отключение. Я не уверен, как em-hhtp-request справляется с этим, но я уверен, что это так, просто проведите несколько тестов с локальным сервером.   -  person Schmurfy    schedule 14.02.2012


Ответы (1)


Вы можете прикрепить обратный вызов errback к объекту запроса:

http.errback { puts 'error or timeout' }

Из wiki em-http-request:

Функция Errback вызывается только в случае сбоя подключения, например, тайм-аута или неправильного имени хоста DNS.

Лично я предпочитаю использовать Faraday, а не работать с необработанной библиотекой em-http-request:

require 'faraday'

http = Faraday.new do |b|
  b.adapter :em_http
end

res = http.get 'http://whatcodecraves.com'
puts res.body

Вот руководство по Фарадею. . А если вы работаете с API потоковой передачи в Твиттере, вот что нужно остерегаться. Удачи!

person Jerry C.    schedule 18.07.2012