我一直在研究使用 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 请求,为什么客户端必须等待?