我有一個Sinatra網絡應用程序,我非常想增強流媒體更新某些功能。不過,現在我只是想學習使用流式數據的方法,這是我以前從未做過的。我有以下簡單的測試代碼:流與Sinatra,逐步更新目標
在西納特拉:
get '/foo' do
stream do |out|
10.times do
out.puts "foo"
out.flush
sleep 1
end
end
end
get '/bar' do
erb :bar
end
在bar.erb
:
<body>
<div class="stream">
nothing.
</div>
</body>
<script type="text/javascript" charset="utf-8">
$(document).ready(function() {
$.get('/foo', function(html) {
$(".stream").html(html);
});
});
</script>
我並不感到驚訝,這不會做我想做的,這是在寫入每一個'foo'時動態地更新頁面。相反,沒有任何事情發生~10秒,然後我得到foo foo foo foo foo foo foo foo foo foo foo
。
我的問題是,如何在ERB模板(使用Ruby,jQuery或其他方式)中提取流數據,而不是一直阻塞,直到全部收集並一次性將它全部吐出?
謝謝指點。我很失望Sinatra'stream'塊不能按照我設想的方式工作,但我認爲這會有點太好,不可能是真的。 EM-Websocket看起來很不錯,我會開始閱讀。 – asfallows
請注意,Erb或Haml不以任何流式傳輸方式提供內容,因此Sinatra無法傳輸任何響應。但是,Sinatra *可以*自己發送流式響應,* iff *您有流式傳輸內容供其使用。 – Phrogz