我一直在研究用EventMachine来处理一些工作的可能性.在Sinatra中,这似乎工作得很好,但Rails 3似乎在渲染视图之前执行所有刻度.
当我在瘦Web服务器下运行以下代码时,它的行为与预期一致.第一个请求立即返回,第二个请求正在等待3秒睡眠呼叫完成.这是预期的行为.
class EMSinatra < Sinatra::Base
get "/" do
EM.next_tick { sleep 3 }
"Hello"
end
end
Run Code Online (Sandbox Code Playgroud)
在Rails 3运行中,我正在尝试做同样的事情:(在瘦下运行)
class EmController < ApplicationController
def index
EM.next_tick {
sleep(3)
}
end
end
Run Code Online (Sandbox Code Playgroud)
在Rails中,睡眠调用在将视图呈现给浏览器之前发生.结果是我等待3秒钟才能渲染初始页面.
有人知道为什么会这样吗?我不是在寻找评论,这是一个好的做法.我只是在试验.将小任务投入反应堆循环似乎是一件值得探讨的事情.如果我要进行一些非阻塞的http请求,为什么客户端必须等待?