Rails 4 のライブ ストリーミングを使用して text/event-stream を実装しようとしています。それはうまく機能し、私が遭遇した唯一の問題は、メッセージを送信せずに接続が有効かどうかを確認できないことです.
私が考え出した唯一の解決策は、循環ティックジェネレーターでサポートチャネルを作成して、バックグラウンドタスクが定期的にメッセージを送信するようにすることです。しかし、それは面倒で信頼性がないようです。より良い解決策はありますか?
これが私のコントローラーです:
require 'persistency/sse'
require 'persistency/track'
class PersistencyController < ApplicationController
include ActionController::Live
def stream
response.headers['Content-Type'] = 'text/event-stream'
sse = Persistency::SSE.new(response.stream)
track = Persistency::Track.new(current_user)
redis = Redis.new
begin
redis.subscribe(:info, :chat) do |on|
on.message do |channel, message|
sse.write({ :message => message }, :event => channel)
end
end
rescue IOError
ensure
track.close
sse.close
end
end
end