2

ActionController::Live とカスタム SSE ライブラリを使用して Rails アプリケーションを構築しています。私のサーバーは puma で、Rails のバージョンは 4 です。これは私のコントローラーのコードです。

include ActionController::Live
def index
response.headers['Content-Type'] = 'text/event-stream'
ss = Reloader::SSE.new(response.stream)
100.times {
  ss.write({ :message => "just checking"}, :event => 'refresh')
  sleep 10
}

ensure
   ss.close
end

これは私のライブラリ sse.rb ファイルです

class SSE
def initialize io
  @io = io
end

def write object, options = {}
  options.each do |k,v|
    @io.write "#{k}: #{v}\n"
  end
  @io.write "data: #{JSON.dump(object)}\n\n"
end

def close
  @io.close
end
end

これは、SSEを処理するための私のapplication.jsファイルです

$(document).ready(function() {
  setTimeout(function() {
    var source = new EventSource('/');
    source.addEventListener('refresh', function(e) {
      window.location.reload();
    });
  }, 1);
});

このサイトのチュートリアルに従っていますhttp://tenderlovemaking.com/2012/07/30/is-it-live.html Firefox ページをロードするたびに、ストリームを処理していません。代わりに、次のオプションを表示しています。ストリームをテキスト ファイルとしてダウンロードします。なぜこれが起こっているのかわかりません。

4

1 に答える 1