Как отключить Ruby XMLRPC сервер? - PullRequest
0 голосов
/ 17 февраля 2012

Я сейчас тестирую поддержку 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 ..." на стандартный вывод, но фактически не выключается и продолжает обрабатывать входящие запросы.Что я делаю не так?

Ответы [ 2 ]

0 голосов
/ 21 февраля 2012

Я изучил XMLRPC::Server исходный код.Кажется, ошибка / функция, которая предотвращает отключение, если клиент использует соединение с флагом keep-alive HTTP.

Обходной путь должен использовать call_async вместо call.

0 голосов
/ 17 февраля 2012

Вы заметили, что без входящих запросов он корректно отключается?Кроме того, после того, как вы завершите работу клиента, он будет выключен, как и должно, возвращая символ :Stop.Он ждет, пока клиент прекратит накачку данных, прежде чем завершить работу.

...