针对组中的特定用户

Target specific user in group

ASP.NET 核心信号R

我知道我们可以向群组发送消息。我知道我们可以向用户发送消息。有没有办法给群里的某个用户发消息,也就是之前的受众的交集。

据我了解:组是元数据中具有组名的连接集合,用户是身份验证声明中具有用户名的连接集合。组中的用户将是属于特定用户并属于特定组的连接的集合。

根据 SignalR 的内部工作原理,这应该是可能的,但很可能没有公开这样的方法。

用例:假设您有一群人的聊天组,并且您想要向组中的一个用户发送特定的系统消息。例如,假设服务器需要随机 select 组中的一个用户,并向他们发送游戏的密码,其他人不应该知道(假设服务器已经有所有用户的列表在一个不变的群体中,只有联系可能会改变)。该消息应该发送给特定用户,而不是发送给他的所有联系人。他可能有一些其他连接,这些连接在不同的聊天组中处于活动状态,因此我们不想通知这些连接。我们只想定位属于该用户的连接,这些连接当前是特定聊天组的一部分。

我在无服务器模式下将 Azure SignalR 服务与 NodeJS Azure 函数应用程序一起使用。 C# 中默认服务器模式的答案也会有所帮助。

解决方案是创建一个由基本组名和用户 ID 组合而成的组(例如:secondaryGroup = group + "::" + user)。

除了将 user/connection 添加到基本组之外,还将用户添加到此辅助组(除了基本组之外)。

这个辅助组将包含属于用户的所有连接,并且是基本组的一部分。

要定位组中的所有用户 - 使用基本组名称。
要定位组中的特定用户 - 使用辅助组名称。

这会显着增加组数,但不会产生非常显着的负载/性能影响。

有关详细信息,请参阅 GitHub 问题(问题评论中的链接)。