Mam aplikację szyny używam na cienkim serwerze, aby wykorzystać pętlę uruchamiania EventMachine. Problem polega na tym, że chciałbym móc dołączyć em-websocket do przetwarzania informacji pochodzących z ws i zatrzymać i uruchomić websocket bez zatrzymywania pętli EM. Tak właśnie uruchamiam websocket.Bezpieczne zatrzymywanie em-websocket w szynach cienkich
EventMachine::WebSocket.start(:host => "0.0.0.0", :port => 8080) do |ws|
ws.onopen { }
ws.onclose { }
ws.onmessage { |msg| }
end
Problem dotyczy kodu start/stop. Od docs EM-websocket za
#Start WebSocket
def self.start(options, &blk)
EM.epoll
EM.run do
trap("TERM") { stop }
trap("INT") { stop }
EventMachine::start_server(options[:host], options[:port],
EventMachine::WebSocket::Connection, options) do |c|
blk.call(c)
end
end
end
#Stop WebSocket
def self.stop
puts "Terminating WebSocket Server"
EventMachine.stop
end
Problem polega na tym, że wewnętrzny kod em-websocket nie zapisuje podpis pochodzących z EM: START_SERVER aby móc wywołać EventMachine :: STOP_SERVER (podpis), aby go zamknąć. Czy istnieje sposób, w jaki mogę zastąpić te funkcje bez modyfikowania em-websocket, aby móc bezpiecznie uruchamiać/zatrzymywać te strony internetowe? Chciałbym, żeby działał bardziej jak standardowy serwer Eventmachine.
Tak właśnie zrobiłem. – MobileOverlord