我正在测试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,但实际上不会关闭并继续处理传入的请求。我做错了什么?
答案 0 :(得分:0)
您是否注意到没有传入请求它会正常关闭?此外,在您结束客户端后,它将按原样关闭,返回:Stop
符号。它等待客户端在关闭之前停止抽取数据。
答案 1 :(得分:0)
我检查了XMLRPC::Server
源代码。如果客户端使用与keep-alive
HTTP
标志的连接,则似乎是一个阻止关闭的错误/功能。
解决方法是使用call_async
代替call
。