如何关闭Ruby XMLRPC服务器?

时间:2012-02-17 18:04:31

标签: ruby xml-rpc

我正在测试Ruby XMLRPC支持。除XMLRPC::Server#shutdown外,一切正常。

如果我运行以下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 ..."写入stdout,但实际上不会关闭并继续处理传入的请求。我做错了什么?

2 个答案:

答案 0 :(得分:0)

您是否注意到没有传入请求它会正常关闭?此外,在您结束客户端后,它将按原样关闭,返回:Stop符号。它等待客户端在关闭之前停止抽取数据。

答案 1 :(得分:0)

我检查了XMLRPC::Server源代码。如果客户端使用与keep-alive HTTP标志的连接,则似乎是一个阻止关闭的错误/功能。

解决方法是使用call_async代替call