EventMachine実行ループを利用するためにシンサーバーで実行しているRailsアプリがあります。問題は、em-websocketを含めて、wsから着信する情報を処理し、EM実行ループを停止せずにWebsocketを停止および開始できるようにすることです。これが私がWebSocketを開始する方法です。
EventMachine::WebSocket.start(:host => "0.0.0.0", :port => 8080) do |ws|
ws.onopen { }
ws.onclose { }
ws.onmessage { |msg| }
end
問題は開始/停止コードにあります。em-websocketのドキュメントから
#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
問題は、内部em-websocketコードがEM:start_serverからの署名を追跡せず、EventMachine :: stop_server(signature)を呼び出してシャットダウンできることです。em-websocketを変更せずにこれらの関数をオーバーライドして、これらのWebSocketを安全に開始/停止できるようにする方法はありますか?標準のEventmachineサーバーのように機能するかどうかを確認します。