假设我们使用类似current_user的东西,它是ServiceClass的一个实例,它保存用户模型,会话参数和其他信息。 问题是,在连接websocket期间设置变量,并在不同的订阅中重复使用所有AC调用。
然后,在某些时候用户决定更新他的用户名,我们调用current_user.update(new_username)并且它可以正常工作。
但该用户下的其他AC订阅仍使用旧用户模型。我想每个订阅都在自己的线程下工作,因此在一个线程下更新用户模型不会在其他线程下更新它们。这种情况的最佳方法是什么?
class ServiceClass
def initialize(session,...)
@session = session
@user = current_user
end
def update!(username)
@user.username = username
@user.save!
end
...
end
module ApplicationCable
class Channel < ActionCable::Channel::Base
def current_user
@current_user ||= ServiceClass.new(session, user)
end
end
end
答案 0 :(得分:0)
你想要做的是广播到current_user和current_user订阅他/她的流。
在您的控制器中:
ActionCable.server.broadcast "#{current_user}"
在您的频道中(例如,app / channels / user_channel.rb)
class UserChannel < ApplicationCable::Channel
def subscribed
stream_from "#{current_user}"
end
end