加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – 从Ruby on Rails应用程序启动和停止eventmachi

发布时间:2020-12-17 01:58:51 所属栏目:百科 来源:网络整理
导读:更正: 具体来说,我希望从Ruby on Rails控制器启动和停止EventMachine(EM). (我被告知’瘦’会很好用.) 注意: 此EM服务器与运行Ruby on Rails应用程序的Mongrel服务器是SEPARATE. (EM服务器正在接受来自Arduino微控制器的连接.) 运行’Thin’作为服务器..我
更正:

具体来说,我希望从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似乎不会断开已连接的任何内容,但会阻止任何进一步的连接建立到指定的端口.

希望有一些用处!

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读