От 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