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

ruby – 如何捕获EventMachine服务器上的顶级故障?

发布时间:2020-12-17 04:29:11 所属栏目:百科 来源:网络整理
导读:我有一个EventMachine服务器,我用monit监控.有时会崩溃,我试图找出原因,但我不清楚如何记录所有顶级故障.我试过这样的代码: begin EventMachine::run do EventMachine::start_server('0.0.0.0',PORT,MyServer) endrescue Exception = e puts "FAILURE: #{e.
我有一个EventMachine服务器,我用monit监控.有时会崩溃,我试图找出原因,但我不清楚如何记录所有顶级故障.我试过这样的代码:
begin
  EventMachine::run do
    EventMachine::start_server('0.0.0.0',PORT,MyServer)
  end
rescue Exception => e
  puts "FAILURE: #{e.class}: #{e}"
end

但这似乎永远不会发现错误.我怀疑这可能是内存耗尽,我正在单独跟踪,但我仍然希望这台服务器记录其可能的失败原因.

解决方法

如果您想要一个catch-all错误处理程序,请尝试EM.error_handler.来自 docs的示例:
EM.error_handler{ |e|
  puts "Error raised during event loop: #{e.message}"
}

您可能还需要更细粒度的错误处理,在这种情况下,您可以使用errback机制(请参阅Deferrable).例如,您可以在您的reactor循环中:

EventMachine::run do
  server = EventMachine::start_server('0.0.0.0',MyServer)
  server.errback { # handle error thrown by server here  }
end

要使其正常工作,请在MyServer中包含Deferrable,然后在您想要引发错误时,调用失败.

(编辑:李大同)

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

    推荐文章
      热点阅读