我想通过两个应用程序实现以下行为。每当一个应用程序的用户在数据库中创建一个条目时,我想通知正在使用不同应用程序的客户端,数据库是共享的。我正在使用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
端
的多个实现