【问题标题】:Reliable JRuby Timeout for HTTP RequestsHTTP 请求的可靠 JRuby 超时
【发布时间】:2010-11-02 04:50:14
【问题描述】:

我遇到了在 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 位 Linux / Sun Java 1.6

【问题讨论】:

    标签: ruby timeout jruby


    【解决方案1】:

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

    【讨论】:

    • 感谢您的回答。这解决了这个问题,尽管由于大量(看似无害的)openssl 相关警告和 Hpricot 令人讨厌的字符编码问题,我一直不愿意升级:jira.codehaus.org/browse/JRUBY-3732
    【解决方案2】:

    我认为这在 1.3.1 中也没有修复?

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

    【讨论】:

      【解决方案3】:

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

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

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-11-05
          • 2010-12-12
          • 2014-04-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-03-16
          相关资源
          最近更新 更多