SignalR发送All include方法

本文关键字:方法 include All 发送 SignalR | 更新日期: 2023-09-27 18:18:15

当我使用SignalR实现推送服务时,我发现Clients.All()Clients.AllExcept()函数,但我需要Clients.Some()这样的函数。我可以在这里描述我的情况。

有一条消息需要发送给几个用户,我们称之为receiver ,而在线用户列表,我们称之为onlineusers。一些在线用户可能不存在于消息接收者中,我需要排除这些用户。如果我使用AllExcept(),我如何从两个集合中获得被排除的用户?如果我使用循环while来获取集合,似乎对性能没有好处。有人能提点建议吗?谢谢。

SignalR发送All include方法

我建议使用组来管理用户。

加入/离开组并向给定组发送消息的简单示例如下:

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不符合所需条件。这样,您既可以提供过滤器,又可以保持组的性能优势。