有Konstantin Haase的a great example of a chat app using Server-Sent Events。我試圖運行它,並有回調問題(我使用Sinatra 1.3.2和Chrome瀏覽器16)。它們不會運行(例如,在頁面重新加載之後),因此連接數量正在增加。在Sinatra應用程序中處理事件流連接
此外,連接在30-60秒內關閉,除非設置週期性定時器來發送空數據,正如康斯坦丁其他地方所建議的那樣。
你可以複製它嗎?如果是,是否有可能以某種方式解決這些問題? WebSockets在這方面無縫工作... ...
# ruby
get '/stream', provides: 'text/event-stream' do
stream :keep_open do |out|
EventMachine::PeriodicTimer.new(20) { out << "data: \n\n" } # added
settings.connections << out
puts settings.connections.count # added
out.callback { puts 'closed'; settings.connections.delete(out) } # modified
end
end
# javascript
var es = new EventSource('/stream');
es.onmessage = function(e) { if (e.data != '') $('#chat').append(e.data + "\n") }; // modified