Как вы отлавливаете исключения в реализации EventMachine?

У меня проблема, аналогичная в этом другом сообщении , и я пробовал данные решения, но безрезультатно.

Мой проект - это Ruby-бот, который использует библиотеку Blather для подключения к серверу Jabber. Проблема в том, что когда возникает проблема с сервером и Blather генерирует исключение, вся программа закрывается, и у меня нет возможности поймать исключение.

Вот простой код, показывающий проблему. На локальном хосте нет 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

Я думаю, проблема в том, что Блатер также использует EventMachine и, возможно, вызывает EM.stop, что приводит к остановке внешнего экземпляра EM.

6
задан Community 23 May 2017 в 10:30
поделиться