2012-02-17 15 views
0

私は現在Ruby XMLRPCサポートをテスト中です。 XMLRPC::Server#shutdownを除き、すべて正常に動作します。Ruby XMLRPCサーバーをシャットダウンする方法は?

私は次のRuby 1.9.3のテストコードを実行した場合、それはWindows 7とOSX 10.7の両方でサーバーをシャットダウンするために失敗します。

# server.rb 

require "xmlrpc/server" 
require 'thread' 
Thread.new { sleep 10; $server.shutdown() } 
$server = XMLRPC::Server.new(1234) 
$server.add_handler("test") { true } 
$server.serve() 

# client.rb 

require "xmlrpc/client" 
server = XMLRPC::Client.new("localhost", "/", 1234) 
loop { server.call("test"); sleep 0.1 } 

10秒後に、サーバーはstdoutに"INFO going to shutdown ..."を書き込みますが、実際にはシャットダウンされず、着信要求を処理し続けます。私は間違って何をしていますか?

答えて

0

私はXMLRPC::Serverソースコードを調べました。これは、クライアントがkeep-aliveHTTPフラグとの接続を使用する場合、シャットダウンを防ぐバグ/機能のようです。

回避策は、callの代わりにcall_asyncを使用することです。

0

着信要求がなければ正常にシャットダウンすることに気付きましたか?また、クライアントを終了すると、終了するまでにシャットダウンし、:Stopシンボルを返します。シャットダウンする前に、クライアントがデータのポンピングを停止するのを待ちます。

+0

いいえ、$ serverの値が初期化されています。 '' INFOがシャットダウンするように... "'サーバーの応答はそれを示唆しています。実際には決してシャットダウンしません。とにかく、私はこの2つの文字列を切り替えようとしました。違いはありません。 – grigoryvp

+0

あなたは '$ server .__ id__'をスレッド内と' .serve() 'の前に出力できますか?両方の場合(同じ) – farnoy

+0

@famoy 70259918873820 – grigoryvp

関連する問題