Actioncable连接用户列表

我在ActionCable中validation用户是这样的:

module ApplicationCable class Connection < ActionCable::Connection::Base identified_by :current_user def connect self.current_user = find_verified_user logger.add_tags 'ActionCable', current_user.name end protected def find_verified_user if verified_user = User.find_by(id: cookies.signed[:user_id]) verified_user else reject_unauthorized_connection end end end end 

是否有可能获得连接用户列表? 我用谷歌搜索,但发现只有这个stackoverflow问题: 第一 , 第二

Ya有点必须推出自己的用户跟踪。

重要的部分如下:

 # connection module ApplicationCable class Connection < ActionCable::Connection::Base identified_by :uid def connect self.uid = get_connecting_uid logger.add_tags 'ActionCable', uid end protected # the connection URL to this actioncable/channel must be # domain.tld?uid=the_uid def get_connecting_uid # this is just how I get the user id, you can keep using cookies, # but because this key gets used for redis, I'd # identify_by the user_id instead of the current_user object request.params[:uid] end end end # Your Channel def subscribed stop_all_streams stream_from broadcasting_name ConnectedList.add(uid) end def unsubscribed ConnectedList.remove(uid) end 

然后在模型中:

 class ConnectedList REDIS_KEY = 'connected_nodes' def self.redis @redis ||= ::Redis.new(url: ActionCableConfig[:url]) end # I think this is the method you want. def self.all redis.smembers(REDIS_KEY) end def self.clear_all redis.del(REDIS_KEY) end def self.add(uid) redis.sadd(REDIS_KEY, uid) end def self.include?(uid) redis.sismember(REDIS_KEY, uid) end def self.remove(uid) redis.srem(REDIS_KEY, uid) end end 

来自: https : //github.com/NullVoxPopuli/mesh-relay/