1

我遇到了在 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 gem 不能与 JRuby 一起使用。

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

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

4

4 回答 4

2

在最近几个版本的 JRuby 中,该问题已被专门针对和处理。特别是,JRuby 已被修复以允许 timeout.rb 与阻塞 IO 一起工作。你想在 1.3 上。JRuby 1.1.6 已经很老了,有很多问题已经解决了。

于 2009-07-03T04:59:36.110 回答
0

我也不认为这在 1.3.1 中已修复?

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

于 2009-08-17T03:11:45.710 回答
0

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

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

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

于 2009-09-04T01:32:32.647 回答
0

至少在处理套接字连接时,这个错误在 jruby 1.5.5 版中仍然存在。

于 2011-02-10T06:22:00.300 回答