Подтвердить что ты не робот

События, отправленные сервером 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, и он отлично работает на всех браузерах.

Что мне нужно знать о Синатре? спасибо!

4b9b3361

Ответ 1

Если вы хотите поддерживать события, вы должны создать свой собственный объект тела. Взгляните на выполнение и использование. Убедитесь, что вы запускаете его с помощью Thin или Rainbows. Он не будет работать на Mongrel или WEBrick.

Вы можете посмотреть презентацию на Confreaks (ее исходный код в GitHub).

Обновление: здесь еще один пример (приложение простого чата с использованием Sinatra Streaming API).