2012-02-17 117 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 } 

後十秒鐘,服務器寫入"INFO going to shutdown ..."到標準輸出,但將不會實際關閉並繼續處理傳入的請求。我究竟做錯了什麼?

回答

0

我已經檢查了XMLRPC::Server的源代碼。如果客戶端使用連接keep-aliveHTTP標誌,它似乎是一個防止關閉的bug /功能。

解決方法是使用call_async而不是call

0

您是否注意到沒有傳入的請求會正常關機?另外,在客戶端結束之後,它將會自動關閉,返回:Stop符號。它會在關閉之前等待客戶停止抽取數據。

+0

不,$ server的值被初始化。 「INFO將關閉...」服務器響應提示。它從來沒有真正關閉過。無論如何,我試圖切換這兩個字符串 - 沒有區別。 – grigoryvp 2012-02-17 22:16:32

+0

您可以在線程和'.serve()'之前打印'$ server .__ id__'嗎? – farnoy 2012-02-17 22:49:59

+0

@famoy 70259918873820兩種情況(相同)。 – grigoryvp 2012-02-18 06:43:46