Я пытаюсь реализовать поток text/event, используя Rails 4 Live streaming. Он отлично работает, и единственная проблема, с которой я столкнулся, заключается в том, что я не могу проверить, жив ли соединение, не отправляя никаких сообщений.
Единственное решение, которое я выяснил, - создать вспомогательный канал с генератором циклических тиков, чтобы некоторая фоновая задача периодически отправляла туда сообщения. Но это кажется грязным и ненадежным. Какие-нибудь лучшие решения?
Вот мой контроллер:
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