客户端关闭浏览器或转到其他页面后,直播不会关闭

The live stream won't be closed after client close browser or go to another page

以下是我的事件流

代码片段

然而,它应该在客户端关闭浏览器后在控制台上打印“关闭直播流”字符串,但它没有。

  def new_prizes_stream
    begin
      ap "open a live stream"
      response.headers['Content-Type'] = 'text/event-stream'
      redis = Redis.new
      redis.subscribe('messages.create') do |on|
        on.message do |event, data|
          response.stream.write "event: #{event}\n"
          response.stream.write "data: #{data}\n\n"
        end
      end
    rescue ActionController::Live::ClientDisconnected
    ensure
      ap "close a live stream"
      redis.quit          
      response.stream.close
    end
  end

development.rb

  config.allow_concurrency = true
  config.preload_frameworks = true
  config.cache_classes = false
  config.eager_load = false   

Redis 订阅正在阻塞。请在此处查看问题:https://github.com/rails/rails/issues/10989

我在单独的线程中使用心跳解决方案来检测 ClientDisconnected 异常。