2009-06-11 8 views
1

JRuby(Linux)で確実に動作しないタイムアウトに問題があります。具体的には、リモートサーバーにHEAD要求を送信し、このサーバーがビジー(応答しない)の場合、構成されたタイムアウトは発生せず、アプリケーションは長時間停止します。私はread_timeoutを設定し、timeout()機能を使用して、両方を試してみましたが、どれも確実に働いた:HTTP要求に対する信頼できるJRubyタイムアウト

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の宝石はJRubyで使用することはできません。

誰かがJRubyでHTTP要求の信頼できるタイムアウトを取得する方法を知っていますか?

PS:これは、この問題は、特異的に標的とJRubyのの最後のいくつかのバージョンに比べて処理されたのJRuby 1.1.6/32ビットLinux /日のJava 1.6

答えて

2

です。特にJRubyは、timeout.rbがIOのブロックで動作するように修正されました。あなたは1.3になりたがっています。 JRuby 1.1.6はかなり古く、その後解決されているいくつかの問題があります。

+0

感謝。これは問題の解決にはなりましたが、(一見無害な)openssl関連の警告や、Hpricotの文字エンコーディングの問題のためにアップグレードすることには消極的でした:http://jira.codehaus.org/browse/JRUBY-3732 – Pankrat

0

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

注:

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

0

このバグは、ソケット接続を扱う少なくとも1.5.5のverのJRubyでまだそこ..ですあなたの答えのための

関連する問題