有一个使用Konstantin Haase 的服务器发送事件的聊天应用程序的绝佳示例。我正在尝试运行它并遇到回调问题(我使用 Sinatra 1.3.2 并使用 Chrome 16 浏览)。它们根本不运行(例如在页面重新加载后),因此连接数正在增长。
此外,连接会在 30-60 秒内关闭,除非按照 Konstantin 在其他地方的建议,设置定期计时器来发送空数据。
你能复制它吗?如果是,是否有可能以某种方式解决这些问题?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