Я предполагаю, что вы не вызываете start_control_server и stop_control_server внутри другого метода контроллера.Это означает, что ваша переменная экземпляра (@EchoServer) не будет существовать при вызове stop.
Одним из решений может быть сохранение идентификатора, возвращенного из start_server, в сеансе.Как и в
def start_control_server
session[:em_server_id] = EventMachine::start_server "0.0.0.0", 4000, EchoServer
end
def stop_control_server
EventMachine.stop_server(session[:em_server_id]) if session[:em_server_id]
session[:em_server_id] = nil
end
Кроме того, если вы запускаете приложение rails с использованием thin, то вы уже находитесь внутри цикла Eventmachine, поэтому вам не нужно вызывать EventMachine :: run.Вызов EventMachine.stop_server, по-видимому, не отключает ничего, что уже подключено, но мешает установлению дальнейших подключений к указанному порту.
Надеюсь, что некоторые из них используют!