问题描述
我想了解ASP.NET Core SignalR中UserIdentifier,ConnectionId和Groups背后的原理吗?同一UserIdentifer(代表用户)是否可以具有多个signalR连接ID是不是真的?如果是这样,为什么要使用小组来建立联系?为什么不合并一个UserIdentifier下的连接?
解决方法
是不是同一UserIdentifer(代表用户)可以拥有 多个signalR连接ID?
是的,SignalR
中的单个用户可以与一个应用建立多个连接。例如,用户可以在其台式机以及电话上进行连接。每个设备都有单独的SignalR
连接,但是它们都与同一用户关联。
如果是的话,为什么要使用组将连接连接在一起?
组是与名称关联的连接的集合。消息可以发送到组中的所有连接,而每个连接可以与不同的用户关联。建议使用组来发送到一个或多个连接,因为组是由应用程序管理的。一个连接可以是多个组的成员。
为什么不合并一个UserIdentifier下的连接?
您可以通过使用集线器方法将用户标识符传递给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的更多详细信息。