我有一个在瘦服务器上运行的 Rails 应用程序以利用 EventMachine 运行循环。问题是我希望能够包含 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 服务器。