gpt4 book ai didi

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

转载 作者:数据小太阳 更新时间:2023-10-29 07:38:36 27 4
gpt4 key购买 nike

更正:

具体来说,我希望启动和停止 EventMachine (EM) 来自 Ruby on Rails Controller 。

(有人告诉我,'Thin' 会很适合这个。)

注意:此 EM 服务器与 Mongrel 是分开的运行 Ruby on Rails 应用程序的服务器。 (EM 服务器正在接受来自 Arduino 微 Controller 的连接。)

作为服务器运行“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 以外的其他服务器,请提供执行上述代码的代码。

此处提供完整的 Controller 代码:http://pastie.org/1698383

最佳答案

我猜您没有在另一个 Controller 方法中调用 start_control_server 和 stop_control_server。这意味着当您调用停止时,您的实例变量 (@EchoServer) 将不存在。

一个解决方案可能是将 start_server 返回的 id 存储在 session 中。如

  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 循环中,因此您不需要调用 EventMachine::run。调用 EventMachine.stop_server 似乎不会断开任何已连接的连接,但会阻止与指定端口建立任何进一步的连接。

希望这些有用!

关于ruby-on-rails - 从 Ruby on Rails 应用程序启动和停止 eventmachine 服务器的最佳选择是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5386507/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com