0

ASP.NET Core SignalR

我知道我们可以向群组发送消息。我知道我们可以向用户发送消息。有没有办法向组中的用户发送消息,即先前受众的交集。

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

从 SignalR 如何在内部工作的 Afaik,这应该是可能的,但很可能没有公开这种方法。

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

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

4

1 回答 1

0

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

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

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

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

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

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

于 2020-12-10T11:22:06.403 回答