所以我想通过 SignalR 向特定客户端发送消息。该客户端不是 Clients.Caller - 目前我只能通过将其称为“ID”(上下文中的一个属性)来识别它:this.Context.Items["ID"]
那么要通过 ID 查找客户端,我该如何...访问所有客户端或上下文?或者我应该以不同的方式保存这个ID?这不是连接 ID,它是映射到数据库中某些内容的 ID。
基本上我想去Clients.Single(c => c.Items["ID"] == specificId).SendMessage(msg);
在中心的 OnConnectedAsync 方法中,您可以在每次连接时按用户的“ID”对用户进行分组。
E.G:
public async override Task OnConnectedAsync()
{
var currentUserId = /*get your current users id here*/
await Groups.AddToGroupAsync(Context.ConnectionId, $"user-{currentUserId}");
await base.OnConnectedAsync();
}
然后,当您需要向该人发送消息时,您可以将其广播到他们的“个人”群组。 (一个人可能有多个联系,因此小组方法非常适合我们)。
E.G:
Clients.Group($"user-{userId}").SendAsync("UserSpecificMessage", message);
当用户断开连接时,SignalR 将自动处理从组中删除连接的情况。
在使用这种方法时,我们不必向每个客户端广播一条消息,以便只有一个客户端根据 ID 过滤该消息。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)