我在使用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
答案 0 :(得分:2)
此问题已针对最后几个版本的JRuby进行了专门针对和处理。特别是,已修复JRuby以允许timeout.rb与阻塞IO一起使用。你想成为1.3。 JRuby 1.1.6非常陈旧,并且已经解决了许多问题。
答案 1 :(得分:0)
我不认为这在1.3.1中已经修复了吗?
答案 2 :(得分:0)
这不是一个很好的解决方案,但我最终为此功能包装了Apache HTTPClient。
请注意,此代码非常原始:
答案 3 :(得分:0)
至少在处理套接字连接时,这个bug仍然存在于jruby ver 1.5.5中。