2012-02-17 2 views
0

지금 Ruby XMLRPC 지원을 테스트하고 있습니다. XMLRPC::Server#shutdown을 제외한 모든 것이 정상적으로 작동합니다. 나는 다음과 같은 루비 1.9.3 테스트 코드를 실행하면Ruby XMLRPC 서버를 종료하는 방법은 무엇입니까?

, 그것은 모두 윈도우 7과 OSX 10.7에 서버를 종료하는 데 실패, 서버는 stdout에 "INFO going to shutdown ..."를 기록,

# 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 } 

열 후 초 만 실제로 종료되지 않고 들어오는 요청을 계속 처리합니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

답변

0

나는 XMLRPC::Server 소스 코드를 검사했다. 클라이언트가 keep-aliveHTTP 플래그로 연결을 사용하는 경우 종료를 막는 버그/기능인 것 같습니다.

해결 방법은 call 대신 call_async을 사용하는 것입니다.

0

들어오는 요청이 없다면 제대로 종료 된 것을 알고 계셨습니까? 또한 클라이언트를 끝내면 종료 될 것이므로 :Stop 기호를 반환합니다. 클라이언트가 종료되기 전에 데이터 펌핑을 중지 할 때까지 기다립니다.

+0

아니요, $ server의 값이 초기화됩니다. ''종료 할 정보 ... "'서버 응답은 그것을 암시합니다. 단지 실제로 종료되지 않습니다. 어쨌든,이 두 문자열을 전환하려고 시도했습니다 - 차이가 없습니다. – grigoryvp

+0

당신은'$ server .__ id__'를 쓰레드와'.serve()'앞에서 출력 할 수 있습니까? – farnoy

+0

@ famoy 70259918873820 두 경우 모두 (동일). – grigoryvp

관련 문제