2009-06-11 8 views
1

Ich habe Probleme mit Timeouts, die unter JRuby (Linux) nicht zuverlässig funktionieren. Genauer gesagt, wenn ich eine HEAD-Anfrage an einen entfernten Server sende und dieser Server beschäftigt ist (antwortet nicht), wird das konfigurierte Zeitlimit nicht ausgelöst und meine Anwendung bleibt lange stehen. Ich habe versucht, beide, das Setzen von read_timeout und mit Hilfe der timeout() Funktion aber keiner arbeitete zuverlässig:Zuverlässiges JRuby-Timeout für HTTP-Anfragen

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 

für Ruby dieses Problem ausführlich auf der Seite SystemTimer dokumentieren wird. Das vorgeschlagene SystemTimer-Juwel kann jedoch nicht mit JRuby verwendet werden.

Hat jemand eine Idee, wie man zuverlässige Timeouts für HTTP-Anfragen in JRuby bekommt?

PS: Dies ist JRuby 1.1.6/32-Bit-Linux/Sun Java 1.6

Antwort

2

Dieses Problem in den letzten Versionen von JRuby gezielt und behandelt wurde. Insbesondere wurde JRuby behoben, damit timeout.rb mit blockierender IO arbeiten kann. Sie möchten auf 1.3 sein. JRuby 1.1.6 ist ziemlich alt und hat eine Reihe von Problemen, die seither gelöst wurden.

+0

Vielen Dank für Ihre Antwort zu tun. Das behebt das Problem, obwohl ich wegen der vielen (scheinbar harmlosen) openssl-bezogenen Warnungen und einem eklatanten Zeichencodierungsproblem mit Hpricot nicht bereit war, ein Upgrade durchzuführen: http://jira.codehaus.org/browse/JRUBY-3732 – Pankrat

0

Dieser Fehler ist immer noch da in jruby ver 1.5.5 zumindest, wenn sie mit einer Socket-Verbindung ..

Verwandte Themen