Rails 3.2 streaming



我正在从Rails 3.2进行流式下载(CSV),遇到了初始页面请求需要很长时间的问题。以下控制器代码说明了我的问题:

      self.response_body = Enumerator.new do |y|
        10_000_000.times do
          y << "Hello World"
        end
      end 

有了以上内容,响应看起来确实像是流媒体(来自一个无法支持它的服务器…在我的情况下是独角兽)。也就是说,在它开始流媒体播放之前,它的挂起时间比我希望的要长得多。如果我把它改成以下,它的启动速度会快得多:

      self.response_body = Enumerator.new do |y|
        1000.times do
          y << "Hello World"
        end
      end

我的理解是,响应应该从循环的第一次迭代开始,但似乎较大的循环会导致初始加载时间延长。如果每次迭代都是在发生时输出的,那么启动流式处理是否应该花费相同的时间,不管总共会有多少次迭代???

感谢您的真知灼见!

编辑:

以下是对我尝试的技术的解释。也许我误解或错过了一步?:http://facebook.stackoverflow.com/questions/3507594/ruby-on-rails-3-streaming-data-through-rails-to-client/4320399#4320399

编辑:

认为机架缓存可能导致了我的问题。。。我可以为个人请求关闭它吗?

编辑并解决:

我对Rack Cache的看法是错误的。我只需要将self.response.headers['Last-Modified'] = Time.now.ctime.to_s添加到我的响应中。

编辑后的问题正好包含了我需要的答案。将其作为答案张贴在此处

让机架处理程序正确流式传输的答案显然是在响应中添加一个Last-Modified标头:

self.response.headers['Last-Modified'] = Time.now.ctime.to_s

相关内容

  • 没有找到相关文章

最新更新