Ric*_*urt 6 ruby xmpp eventmachine
我对这个帖子有类似的问题,我尝试了给定的解决方案,但无济于事.
我的项目是一个Ruby bot,它使用Blather库连接到Jabber服务器.问题是,当服务器出现问题并且Blather生成异常时,整个程序退出,我没有机会捕获异常.
这是一些显示问题的简单代码.在localhost上没有运行Jabber服务器,因此Blather客户端会抛出异常.我的印象是EM.error_handler {}能够拦截它,但我从未看到**** ERROR消息,程序就停止了.:(
#!/usr/bin/env ruby
require 'rubygems'
require 'blather/client/client'
EM.run do
EM.error_handler { puts " **** ERROR " }
Blather::Stream::Client.start(
Class.new {
}.new, 'echo@127.0.0.1', 'echo')
end
Run Code Online (Sandbox Code Playgroud)
我认为问题是Blather也使用EventMachine并且可能正在调用EM.stop,这会导致外部EM实例停止.
异常和异步编程不是朋友,因此正确处理它们可能很棘手.在同步模型中,可以通过使用rescue可能产生异常的代码块来捕获异常,但是一旦创建了回调方法,该块就需要自己的异常处理,因为它将在该上下文之外运行.
希望error_handler将捕获您的异常,但如果您涉及其他线程可能无法捕获它们.
你可以随时monkeypatch EventMachine.stop_event_loop并EventMachine.stop_server查看是否这是被调用的方法.
| 归档时间: |
|
| 查看次数: |
1888 次 |
| 最近记录: |