Пробуя простой пример с eventmachine и deferrable, я не смог заставить код работать так, как ожидалось. Я ожидал, что следующий код не будет блокироваться при вызове работы на Рабочем, и после отправки двух последовательных сообщений на сервер клиент получит два уведомления «Запланированное задание» до завершения работы первого Рабочего. Если я явно создаю поток вместо EM.spawn, он работает как положено. Как я могу заставить его работать внутри eventmachine?
class Worker
include EM::Deferrable
def work
3.times do |i|
sleep 1
end
set_deferred_status :succeeded
end
end
module Handler
def receive_data(message)
EM.spawn do
worker = Worker.new
worker.callback { puts "Finished" }
worker.work
end.notify
send_data("Job Scheduled...")
end
end
EventMachine::run do
EventMachine::start_server "localhost", 8081, Handler
puts 'running server on 8081'
end
Спасибо! * * 1004