有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