我有以下代码,它在我的 Rails 应用程序中发送 ActionCable 广播:ActionCable.server.broadcast 'notification_channel', notification: 'Test message'
连接如下所示:
module ApplicationCable
class Connection < ActionCable::Connection::Base
identified_by :current_user
def connect
self.current_user = find_verified_user
end
def session
cookies.encrypted[Rails.application.config.session_options[:key]]
end
protected
def find_verified_user
User.find_by(id: session['user_id'])
end
end
end
但是,所有登录该应用程序的用户都会收到它。这identified_by
仅确保登录用户可以连接到该频道,但不限制哪些用户可以获得广播。
有没有办法只向特定用户发送广播?
我能想到的唯一方法是:
ActionCable.server.broadcast 'notification_channel', notification: 'Test message' if current_user = User.find_by(id: 1)
哪里的1
是我要定位的用户的 ID。
对于特定于用户的通知,我发现拥有一个基于当前用户的订阅的 UserChannel 很有用:
class UserChannel < ApplicationCable::Channel
def subscribed
stream_for current_user
end
end
这样 ActionCable 就会为每个用户创建一个单独的通道,您可以根据用户对象使用如下命令:
user = User.find(params[:id])
UserChannel.broadcast_to(user, { notification: 'Test message' })
这样该频道就可以处理所有特定于用户的广播。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)