Я изучал возможность создания фоновых заданий с помощью EventMachine.В Sinatra это, кажется, работает отлично, но Rails 3, кажется, выполняет все тики перед рендерингом представления.
Когда я запускаю следующий код на тонком веб-сервере, он ведет себя как ожидалось.Первый запрос возвращается немедленно, а второй запрос ожидает завершения 3-секундного неактивного вызова.Это ожидаемое поведение.
class EMSinatra < Sinatra::Base
get "/" do
EM.next_tick { sleep 3 }
"Hello"
end
end
В то время как в Rails 3 работает, я пытаюсь сделать то же самое: (работает под thin)
class EmController < ApplicationController
def index
EM.next_tick {
sleep(3)
}
end
end
В Rails вызов сна происходит раньшевизуализация представления в браузере.В результате я жду 3 секунды, чтобы начальная страница отобразилась.
Кто-нибудь знает, почему это происходит?Я не ищу комментарии о том, хорошая это практика или нет.Я просто экспериментирую.Бросать маленькие задачи в петлю реактора кажется интересной вещью.Зачем клиенту ждать, если я собираюсь сделать неблокирующие http-запросы?