События, отправленные сервером HTML5 с Ruby Sinatra
Я новичок в Ruby и Sinatra, я пытаюсь настроить с ним простое событие с поддержкой сервера HTML5. В приведенном ниже коде отлично работает в сборках разработчиков Chrome, но не работает в Non Developer Builds и Safari как на Windows7, так и на OSX.
Сообщение об ошибке в консоли браузера: "Не удалось загрузить ресурс: отменено"
var source = new EventSource('pull');
source.addEventListener('message', function(e) {
console.log(e.data);
}, false);
source.addEventListener('open', function(e) {
// Conn open
}, false);
source.addEventListener('error', function(e) {
if (e.eventPhase == EventSource.CLOSED) {
// Connection was closed.
}
}, false);
С приведенным ниже маршрутом Синатра
get '/pull' do
content_type 'text/event-stream'
newevent = false
response = "data: "+newevent.inspect+" \n\n"
end
Я пробовал аналогичный код на стороне сервера с JSP и Tomcat, и он отлично работает на всех браузерах.
Что мне нужно знать о Синатре?
спасибо!
Ответы
Ответ 1
Если вы хотите поддерживать события, вы должны создать свой собственный объект тела. Взгляните на выполнение и использование. Убедитесь, что вы запускаете его с помощью Thin или Rainbows. Он не будет работать на Mongrel или WEBrick.
Вы можете посмотреть презентацию на Confreaks (ее исходный код в GitHub).
Обновление: здесь еще один пример (приложение простого чата с использованием Sinatra Streaming API).