从Ruby on Rails应用程序启动和停止eventmachine服务器的最佳选择是什么

更正: 具体来说,我希望从Ruby on Rails控制器启动和停止EventMachine(EM)。 (我被告知'瘦'会很好用。) 注意: 此EM服务器与运行Ruby on Rails应用程序的Mongrel服务器是SEPARATE。 (EM服务器正在接受来自Arduino微控制器的连接。) 运行'Thin'作为服务器..我应该能够接受HTTP请求和Arduino的连接。
# Starts Server
def start_control_server
    EventMachine::run {
        @EchoServer = EventMachine::start_server "0.0.0.0", 40013, EchoServer
    }
end

# Attempts ( fails ) to stop server
def stop_control_server
    EventMachine.stop_server(@EchoServer)
end
如果您推荐其他服务器而不是直接的EventMachine,请提供执行上述代码的代码。 完整的控制器代码可在此处获取:http://pastie.org/1698383     
已邀请:
我猜你没有在另一个控制器方法中调用start_control_server和stop_control_server。这意味着当您调用stop时,您的实例变量(@EchoServer)将不存在。 一种解决方案可能是在会话中存储从start_server返回的id。如在
  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
此外,如果您使用thin运行rails应用程序,那么您已经在事件机器循环中,因此您不需要调用EventMachine :: run。调用EventMachine.stop_server似乎不会断开已连接的任何内容,但会阻止任何进一步的连接建立到指定的端口。 希望有一些用处!     

要回复问题请先登录注册