1

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

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

4

2 回答 2

0

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

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

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);
    }
}

更多信息在这里:文档

于 2013-06-14T07:21:36.207 回答
0

使用组和排除参数发送到组的子部分。

Aka 假设我们在“Foo”组中有以下用户:“cidA”、“cidB”、“cidC”

我们现在可以通过以下方式发送到“Foo”的一个小节:

string[] invalidConnectionIds = getMyInvalidConnectionIds(); // Lets say it returns ["cidC"]
Clients.Group("Foo", invalidConnectionIds); // Sends to "cidA" and "cidB"

WheregetMyInvalidConnectionIds确定哪些连接 ID 不符合所需条件。通过这种方式,您可以获得提供过滤器的好处,并且仍然保持组的性能优势。

于 2013-06-14T07:25:29.007 回答