我正忙着尝试使用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配置文件中。
答案 0 :(得分:3)
这取决于您使用的服务器。来自Sinatra README:
请注意,流式传输行为,尤其是并发请求的数量,在很大程度上取决于用于为应用程序提供服务的Web服务器。有些服务器,比如WEBRick,可能根本不支持流式传输。如果服务器不支持流式传输,则在传递给流的块完成执行后,将立即全部发送正文。