SignalR 核心中 UserIdentifier、ConnectionId 和组之间的区别

Difference between UserIdentifier, ConnectionId and Groups in SignalR Core

我想了解 ASP.NET Core SignalR 中 UserIdentifier、ConnectionId 和 Groups 背后的理念?同一个 UserIdentifer(代表用户)不是可以有多个 signalR 连接 ID 吗?如果是这样,为什么要使用群组将联系聚集在一起?为什么不在一个 UserIdentifier 下建立俱乐部关系?

Isn't it true that same UserIdentifer (represents as user) can have multiple signalR connection IDs?

是的,SignalR 中的单个用户可以与一个应用建立多个连接。例如,用户可以在他们的桌面和 phone 上连接。每个设备都有一个单独的 SignalR 连接,但它们都与同一个用户相关联。

If so why use groups to club connections together?

组是与名称关联的连接的集合。消息可以发送到组中的所有连接,而每个连接可以与不同的用户相关联。组是发送到一个或多个连接的推荐方式,因为组由应用程序管理。一个连接可以是多个组的成员。


Why not club connections under one UserIdentifier?

您可以通过将用户标识符传递给集线器方法中的用户函数来向特定用户发送消息,如以下示例所示:

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 的更多详细信息。