1
我有一個應用程序,它存儲了一個到一個actioncable通道的所有連接的計數,在subscribed
上遞增,並在unsubscribed
上遞減。然而,我發現當服務器(Puma)關閉時,部署到Heroku的問題不會成爲活動連接unsubscribed
。因此,當新版本的應用程序啓動時,連接計數比應該高。如何強制ActionCable在Heroku中部署新代碼時斷開所有客戶端
代碼爲我的特殊通道:
class PostChannel < ApplicationCable::Channel
attr_reader :subscribers
def subscribed
channel_name = "TestChannel#{params[:post_id]}"
stream_from channel_name
user_ids = active_users channel_name
user_ids << connection.current_user.id
update_users channel_name, user_ids
end
def unsubscribed
channel_name = "TestChannel#{params[:post_id]}"
user_ids = active_users channel_name
user_ids.delete_at(user_ids.index(connection.current_user.id) ||
user_ids.length)
update_users channel_name, user_ids
end
def active_users(channel_name)
JSON.parse(Redis.current.hget('actioncable', channel_name) || '[]')
end
def update_users(channel_name, user_ids)
Redis.current.hset('actioncable', channel_name, user_ids.to_json)
ActionCable.server.broadcast(
channel_name,
users: user_ids,
action: 'UsersChanged'
)
end
end
如何強制ActionCable退訂上部署到Heroku的所有活動連接?
是的,這是我想到的解決方案,我會給它一個 – JeremyKirkham
但它不會重新連接用戶,除非他們刷新頁面? –
@NicolasMaloeuvre這個問題沒有問,所以不會。 –