HTTP请求的可靠JRuby超时

时间:2009-06-11 16:29:07

标签: ruby timeout jruby

我在使用JRuby(Linux)无法正常工作的Timeout时遇到问题。更具体地说,如果我将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 gem不能与JRuby一起使用。

有没有人知道如何在JRuby中获得HTTP请求的可靠超时?

PS:这是JRuby 1.1.6 / 32位Linux / Sun Java 1.6

4 个答案:

答案 0 :(得分:2)

此问题已针对最后几个版本的JRuby进行了专门针对和处理。特别是,已修复JRuby以允许timeout.rb与阻塞IO一起使用。你想成为1.3。 JRuby 1.1.6非常陈旧,并且已经解决了许多问题。

答案 1 :(得分:0)

我不认为这在1.3.1中已经修复了吗?

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

答案 2 :(得分:0)

这不是一个很好的解决方案,但我最终为此功能包装了Apache HTTPClient。

请注意,此代码非常原始:

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

答案 3 :(得分:0)

至少在处理套接字连接时,这个bug仍然存在于jruby ver 1.5.5中。