0

Goliathと SSEを使用して、最新のツイート、ニュースなどの更新をリアルタイムで送信するストリーミング サーバーを開発しています。このサーバーは別のドメインにマップされます。

index.html

<script>
    if(typeof(EventSource)!=="undefined") {
        var source = new EventSource('http://192.168.0.44:9000/api/stream/articles?channel=Headlines');

        // new connection opened callback
        source.addEventListener('open', function(e) {
          console.log('connection opened');
        }, false);

        // new connection opened callback
        source.addEventListener('message', function(e) {
            console.log(e.data);
           msg = JSON.parse(e.data);
           $('#result').append('<br/>').append(msg);
        }, false);

        // connection closed callback
        source.addEventListener('error', function(e) {
          if (e.eventPhase == EventSource.CLOSED) {
            console.log('connection closed');
          }
        }, false);
    } else {
        $('#result').append('<br/>').append("Whoops! Your browser doesn't receive server-sent events.") ;
    }
  </script>

ゴリアテ コンポーネント

#!/usr/bin/env ruby
require 'rubygems'
require 'goliath'

class RedisPubsub < Goliath::API
  use(Rack::Static, :root => Goliath::Application.app_path("public"), :urls => ["/index.html", "/twitter.html", "/favicon.ico", '/stylesheets/', '/javascripts/', '/images/'])
  use Goliath::Rack::Params
  use Goliath::Rack::Render, 'json'

  def response(env)
    ...
    ....
    env.stream_send("data:#{message}\n\n")
    streaming_response(200, {'Content-Type' => 'text/event-stream', 'Access-Control-Allow-Origin' => '*'})
  end
end

Goliath ストリーミング サーバーは、ローカル マシンの 9000 ポートで実行されています。それを介してページにアクセスしようとすると、http://localhost/index.html応答で CORS 'Access-Control-Allow-Origin' ヘッダーを送信しても、Chrome で言及されているエラーが表示されます。ここでは、FF で正常に動作しないようにしてください。

これを修正する方法はありますか?

4

1 に答える 1

0

http://www.html5rocks.com/en/tutorials/eventsource/basics/に示されているように、Content-type ヘッダーを text/event-stream に設定する必要があります。

于 2012-12-06T04:55:30.423 に答える