假设我们使用类似 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