2012-02-17 138 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