我正在尝试使用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