Tôi gặp sự cố tương tự với this other post và tôi đã thử các giải pháp đã cho nhưng không có kết quả.Làm thế nào để bạn nắm bắt ngoại lệ trong một cài đặt EventMachine?
Dự án của tôi là rô bốt Ruby sử dụng thư viện Blather để kết nối với máy chủ Jabber. Vấn đề là khi có một vấn đề với máy chủ và Blather tạo ra một ngoại lệ toàn bộ chương trình thoát và tôi không có cơ hội để bắt ngoại lệ.
Dưới đây là một số mã đơn giản hiển thị sự cố. Không có máy chủ Jabber nào chạy trên máy chủ cục bộ để máy khách Blather ném một ngoại lệ. Tôi đã được ấn tượng rằng EM.error_handler {} sẽ có thể đánh chặn nó nhưng tôi không bao giờ thấy thông báo **** ERROR
và chương trình chỉ dừng lại. :(
#!/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, '[email protected]', 'echo')
end
Tôi nghĩ vấn đề là Blather cũng sử dụng EventMachine và có thể được gọi EM.stop, gây ra các trường hợp EM bên ngoài để ngăn chặn.
Hmmm ... đây là giải pháp ít hơn tối ưu. 'error_handler' * nên * bắt được những thứ này nhưng không phải vì lý do nào đó. Tôi sẽ cung cấp cho các tùy chọn vá khỉ một đi và xem nếu tôi có thể "giải quyết" vấn đề của tôi theo cách đó. :/ –
Bản vá khỉ chỉ để xem liệu các phương pháp đó có đang được gọi hay không, vì sau đó chúng không còn cần thiết nữa. – tadman