Надежное время ожидания JRuby для HTTP-запросов - PullRequest
1 голос
/ 11 июня 2009

У меня проблемы с таймаутами, которые не работают надежно под JRuby (Linux). Более конкретно, если я отправляю запрос HEAD на удаленный сервер, и этот сервер занят (не отвечает), настроенное время ожидания не срабатывает, и мое приложение останавливается на долгое время. Я попробовал оба варианта, установив read_timeout и используя функцию timeout(), но ни одна из них не работала надежно:

Timeout::timeout(5) do
  Net::HTTP.start(uri.host, uri.port) do |http|
    http.read_timeout = 5
    http.request_head(uri.request_uri)
  end
end

Для Ruby эта проблема подробно описана на странице SystemTimer . Однако предлагаемый гем SystemTimer нельзя использовать с JRuby.

Кто-нибудь знает, как получить надежные тайм-ауты для HTTP-запросов в JRuby?

PS: это JRuby 1.1.6 / 32-битная Linux / Sun Java 1.6

Ответы [ 4 ]

2 голосов
/ 03 июля 2009

Эта проблема была специально нацелена и решена в нескольких последних версиях JRuby. В частности, JRuby был исправлен, чтобы позволить timeout.rb работать с блокировкой ввода-вывода. Вы хотите быть на 1.3. JRuby 1.1.6 довольно старый и имеет ряд проблем, которые с тех пор были решены.

0 голосов
/ 10 февраля 2011

Эта ошибка по-прежнему присутствует в jruby ver 1.5.5 по крайней мере при работе с сокетным соединением.

0 голосов
/ 04 сентября 2009

Это не очень хорошее решение, но в итоге я обернул Apache HTTPClient для этой функции.

Обратите внимание, что этот код ОЧЕНЬ сырой:

http://github.com/ikai/jruby-rest-client/tree/master

0 голосов
/ 17 августа 2009

Я не вижу это как исправлено в 1.3.1?

http://jira.codehaus.org/browse/JRUBY-3880

...