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 ビット 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

このバグは、少なくともソケット接続を扱う場合、jruby ver 1.5.5 にまだ残っています。

于 2011-02-10T06:22:00.300 に答える
0

これは素晴らしい解決策ではありませんが、この機能のために Apache HTTPClient をラップすることになりました。

このコードは非常に生であることに注意してください。

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

于 2009-09-04T01:32:32.647 に答える
0

これも 1.3.1 で修正されたとは思いませんか?

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

于 2009-08-17T03:11:45.710 に答える