17

Ruby と Sinatra は初めてです。簡単な HTML5 Server-Sent Event をセットアップしようとしています。以下のコードは 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);

以下のシナトラルートで

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

JSP と Tomcat で同様のサーバー側コードを試してみましたが、すべてのブラウザーで正常に動作します。

シナトラについて知っておくべきことは何ですか? ありがとう!

4

1 に答える 1

25

イベントをサポートしたい場合は、独自の body オブジェクトを作成する必要があります。実装使用法を見てみましょう。Thin または Rainbows で実行してください。Mongrel や WEBrick では動作しません。

プレゼンテーションは Confreaks で見ることができます(そのソース コードは GitHub にあります)。

更新:もう 1 つの例を次に示します(Sinatra Streaming API を使用した単純なチャット アプリケーション)。

于 2011-06-30T17:03:24.377 に答える