Thin EventMachine Sinatra vs. Rails

я изучал возможность фонового выполнения некоторых заданий с помощью EventMachine. В Sinatra это, кажется, отлично работает, но Rails 3, кажется, выполняет все тики перед рендерингом представления.

Когда я запускаю следующий код на тонком веб-сервере, он ведет себя так, как ожидалось. Первый запрос возвращается немедленно, а второй запрос ожидает завершения 3-секундного вызова сна. Это ожидаемое поведение.

class EMSinatra < Sinatra::Base
  get "/" do
    EM.next_tick { sleep 3 }
    "Hello"
  end
end

В то время как в запущенном Rails 3 я пытаюсь сделать то же самое: (работает в тонком режиме)

class EmController < ApplicationController
  def index
    EM.next_tick {
      sleep(3)
    }
  end
end

В Rails вызов сна происходит до рендеринга представления в браузере. В результате я жду 3 секунды для отображения начальной страницы.

Кто-нибудь знает, почему это происходит? Я не ищу комментариев, является ли это хорошей практикой или нет. Я просто экспериментирую. Добавление небольших задач в цикл реактора кажется интересным. Зачем клиенту ждать, если я собираюсь сделать несколько неблокирующих http-запросов?

9
задан Bruce Hauman 21 February 2011 в 01:09
поделиться