gpt4 book ai didi

ruby-on-rails - 精简 EventMachine Sinatra 与 Rails

转载 作者:数据小太阳 更新时间:2023-10-29 06:50:41 26 4
gpt4 key购买 nike

我一直在研究使用 EventMachine 为一些工作做后台处理的可能性。在 Sinatra 中,这似乎工作得很好,但 Rails 3 似乎在呈现 View 之前执行所有滴答。

当我在瘦网络服务器下运行以下代码时,它的行为符合预期。第一个请求立即返回,第二个请求等待 3 秒 sleep 调用完成。这是预期的行为。

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 中, sleep 调用发生在将 View 呈现给浏览器之前。结果是我等待 3 秒来呈现初始页面。

有人知道为什么会这样吗?我不是在寻找关于这是否是一个好习惯的评论。我只是在试验。将小任务放入 react 堆循环似乎是一件值得研究的有趣事情。如果我要发出一些非阻塞的 http 请求,为什么客户端必须等待?

最佳答案

我不确定这是您正在寻找的答案,但我之前对此进行了一些研究。让我告诉你一些背景信息:我们想要实现的是 Rails 已经刷新了模板树的部分(例如布局的第一部分),即使 Controller Action 需要很长时间才能加载。这样做的结果是,当网络服务器仍在工作时,用户已经在他们的浏览器中看到了一些东西。当然,主视图必须等待渲染,因为它可能需要来自 Controller 操作的数据。

这种技术也称为 BigPipe,facebook 写了一篇关于此的不错的博客: http://www.facebook.com/notes/facebook-engineering/bigpipe-pipelining-web-pages-for-high-performance/389414033919

无论如何,在为 Rails 3 实现这一目标做了一些研究之后,我发现了 Yehuda Katz 发表的这篇博文。 http://yehudakatz.com/2010/09/07/automatic-flushing-the-rails-3-1-plan/

所以现在我认为你真的必须坚持等待 Controller

关于ruby-on-rails - 精简 EventMachine Sinatra 与 Rails,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5061341/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com