Sinatra :: Streaming with Rack没有分块响应

时间:2014-12-18 03:15:41

标签: ruby sinatra rack

我正忙着尝试使用Sinatra和Rack进行简单的流测试。

在我的 stream.rb 文件中,我有:

require 'sinatra'
require 'sinatra/streaming'
class StreamAPI < Sinatra::Base
    helpers Sinatra::Streaming
    get '/stream' do
        stream do |out|
            5.times do
                out.puts "Hello!"
                sleep 1
            end
            out.flush
        end
    end
    run! if app_file == $0
end

在我的 config.ru 中,我有:

require 'rack'
require './stream.rb'
run StreamAPI

当我卷曲网址时,我得到了#34;你好!&#34; 5次,但5秒后一次全部。查看标题,我可以看到Transfer-Encoding设置为Chunked。我想要的是a&#34;你好!&#34;在暂停1秒之后再来一个。


修改:除了下面的选定答案外,我还需要将proxy_buffering off;添加到我的NGINX配置文件中。

1 个答案:

答案 0 :(得分:3)

这取决于您使用的服务器。来自Sinatra README

  

请注意,流式传输行为,尤其是并发请求的数量,在很大程度上取决于用于为应用程序提供服务的Web服务器。有些服务器,比如WEBRick,可能根本不支持流式传输。如果服务器不支持流式传输,则在传递给流的块完成执行后,将立即全部发送正文。

看起来您正在使用不支持流式传输的服务器。如果你切换到一个(例如ThinPuma),这应该有效。