17

我是 Ruby 和 Sinatra 的新手,我正在尝试使用它设置一个简单的 HTML5 服务器发送事件,下面的代码在 Chrome 开发人员构建中运行良好,但在 Windows7 和 OSX 上的非开发人员构建和 Safari 中失败。

浏览器控制台中的错误消息是“加载资源失败:已取消”

 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);

使用以下 Sinatra 路线

get '/pull' do
   content_type 'text/event-stream'
   newevent   = false
   response = "data: "+newevent.inspect+" \n\n"
end

我用 JSP 和 Tomcat 尝试过类似的服务器端代码,它在所有浏览器上都能正常工作。

关于 Sinatra,我需要了解什么?谢谢!

4

1 回答 1

25

如果要支持事件,则必须创建自己的 body 对象。看看实现使用。确保使用 Thin 或 Rainbows 运行它。它不适用于 Mongrel 或 WEBrick。

您可以在 Confreaks 上观看演示文稿(其源代码在 GitHub 上)。

更新:这是另一个示例(使用 Sinatra Streaming API 的简单聊天应用程序)。

于 2011-06-30T17:03:24.377 回答