【问题标题】:Difference between UserIdentifier, ConnectionId and Groups in SignalR CoreSignalR Core 中的 UserIdentifier、ConnectionId 和 Groups 之间的区别
【发布时间】:2020-09-24 11:22:34
【问题描述】:
我想了解 ASP.NET Core SignalR 中的 UserIdentifier、ConnectionId 和 Groups 背后的理念?同一个 UserIdentifer(代表用户)不是真的可以有多个 signalR 连接 ID 吗?如果是这样,为什么要使用群组来将联系联系在一起?为什么不在一个 UserIdentifier 下进行俱乐部连接?
【问题讨论】:
标签:
asp.net-core
asp.net-core-signalr
【解决方案1】:
同一个UserIdentifer(代表用户)是不是可以有
多个 signalR 连接 ID?
是的,SignalR 中的单个用户可以与一个应用建立多个连接。例如,用户可以在他们的桌面和手机上进行连接。每个设备都有一个单独的SignalR 连接,但它们都与同一个用户相关联。
如果是这样,为什么要使用群组来建立联系?
组是与名称相关联的连接集合。消息可以发送到组中的所有连接而每个连接可以与不同的用户相关联。组是发送到一个或多个连接的推荐方式,因为组由应用程序管理。一个连接可以是多个组的成员。
为什么不在一个 UserIdentifier 下进行俱乐部连接?
您可以通过在 hub 方法中将用户标识符传递给 User 函数来向特定用户发送消息,如下例所示:
public Task SendPrivateMessage(string user, string message)
{
return Clients.User(user).SendAsync("ReceiveMessage", message);
}
如果向用户发送消息,与该用户关联的所有连接都会收到消息。可以通过集线器中的Context.UserIdentifier 属性访问连接的用户标识符。
-
Clients.Client()
在特定连接的客户端上调用方法
-
Clients.User()
在与特定用户关联的所有连接上调用方法
-
Clients.Group()
对指定组中的所有连接调用方法
Hub.Clients中还有更多方法。
SignalR 非常灵活,可根据需要提供多种选择。
您可以在此处找到有关users and groups in SignalR 的更多详细信息。
【讨论】:
-
感谢您的回答。确实有助于理清概念。同时,我自己也在做一些关于这个话题的研究。这个link 帮助我们了解何时使用基于用户标识符的分组以及何时使用组。