ActionController :: LIve是否可以检查连接是否仍然存在?

我正在尝试使用Rails 4的直播流实现文本/事件流。 它工作得很好,我遇到的唯一麻烦就是我无法在不发送任何消息的情况下检查连接是否存在。

我想出的唯一解决方案是使用循环刻度生成器创建支持通道,以便某些后台任务将定期发送消息。 但它似乎是凌乱和不可靠的。 更好的解决方案?

这是我的控制器:

require 'persistency/sse' require 'persistency/track' class PersistencyController  message }, :event => channel) end end rescue IOError ensure track.close sse.close end end end 

好的,我找到了两个选择:

1)有趣但不好(因为我没有得到什么服务器应该用来处理1000的并行连接):

 begin ticker = Thread.new { loop { sse.write 0; sleep 5 } } sender = Thread.new do redis.subscribe(:info, :chat) do |on| on.message do |event, message| sse.write(message, :event => event.to_s) end end end ticker.join sender.join rescue IOError ensure Thread.kill(ticker) if ticker Thread.kill(sender) if sender track.close sse.close end 

2)太棒了。 使用Goliath服务器。 事实certificate,它可以检查连接是否丢失没有任何自动收报机。 在前往歌利亚的途中发现了Cramp。 它很轻巧,希望很快,但似乎被放弃了。