如果有新条目,请通知用户

时间:2016-07-22 11:27:21

标签: ruby ruby-on-rails-4 redis

我想通过两个应用程序实现以下行为。每当一个应用程序的用户在数据库中创建一个条目时,我想通知正在使用不同应用程序的客户端,数据库是共享的。我正在使用rails。为了实现这一点,我尝试使用redis pub / sub和服务器端事件,它工作但是每次客户端从一个页面移动到另一个时,一个新的连接到redis被生成并且旧的未被释放导致服务器崩溃。是否有任何其他建议可以解决这个问题。

class EventController < ApplicationController
include ActionController::Live

 def index
 ActiveRecord::Base.clear_active_connections!
 response.headers['Content-Type'] = 'text/event-stream'
 redis = Redis.new
 @last_active = Time.zone.now
 redis.subscribe('event', 'heartbeat') do |on|
    on.message do |pattern, event, data|
      if event == 'heartbeat'
        idle_time = (Time.zone.now - @last_active).to_i
        if idle_time > 2.minutes
          redis.unsubscribe
        end
      else
        @last_active = Time.zone.now
      end
      response.stream.write(data, event: 'new:verification')
    end
 end
 rescue IOError
 rescue ClientDisconnected
 ensure
 redis.quit
 response.stream.close
 end

我也尝试过这个帖子Redis + ActionController::Live threads not dying

的多个实现

0 个答案:

没有答案