SignalR发送All include方法
本文关键字:方法 include All 发送 SignalR | 更新日期: 2023-09-27 18:18:15
当我使用SignalR实现推送服务时,我发现Clients.All()
和Clients.AllExcept()
函数,但我需要Clients.Some()
这样的函数。我可以在这里描述我的情况。
有一条消息需要发送给几个用户,我们称之为receiver ,而在线用户列表,我们称之为onlineusers。一些在线用户可能不存在于消息接收者中,我需要排除这些用户。如果我使用AllExcept()
,我如何从两个集合中获得被排除的用户?如果我使用循环while来获取集合,似乎对性能没有好处。有人能提点建议吗?谢谢。
我建议使用组来管理用户。
加入/离开组并向给定组发送消息的简单示例如下:
public class ContosoChatHub : Hub
{
public Task JoinGroup(string groupName)
{
return Groups.Add(Context.ConnectionId, groupName);
}
public Task LeaveGroup(string groupName)
{
return Groups.Remove(Context.ConnectionId, groupName);
}
public void Send(string message)
{
// Call the addMessage method on all clients in group
Clients.Group("recievers").addMessage("Group Message " + message);
}
}
更多信息在这里:documentation
使用组和排除参数发送到组的子节。
假设组Foo中有以下用户:"cidA", "cidB", "cidC"
我们现在可以通过以下方式发送到"Foo"的子句:
string[] invalidConnectionIds = getMyInvalidConnectionIds(); // Lets say it returns ["cidC"]
Clients.Group("Foo", invalidConnectionIds); // Sends to "cidA" and "cidB"
其中getMyInvalidConnectionIds
确定哪些连接ID不符合所需条件。这样,您既可以提供过滤器,又可以保持组的性能优势。