我正在尝试使用 Rails 4 的实时流实现文本/事件流。它工作得很好,我遇到的唯一问题是我无法在不发送任何消息的情况下检查连接是否存在。
我想出的唯一解决方案是使用循环滴答发生器制作支持通道,以便一些后台任务会定期在那里发送消息。但它似乎是混乱和不可靠的。有更好的解决方案吗?
这是我的控制器:
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