我一直在研究用EventMachine做一些工作的可能性。在Sinatra中,这似乎工作得很好,但Rails3似乎会在渲染视图之前执行所有的计时。
当我在瘦When服务器下运行以下代码时,它的行为与预期的一样。第一个请求立即返回,第二个请求等待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请求,为什么客户端必须等待?
发布于 2012-10-06 13:20:44
使用EM.defer而不是EM.next_tick会导致在发送回响应后发生休眠。
https://stackoverflow.com/questions/5061341
复制相似问题