将单个SignalR消息发送给多个组的成员

时间:2016-04-29 12:37:21

标签: c# signalr

当运行以下SignalR代码时,属于多个合格组的成员将收到多条消息:

public class ChatHub : Hub
{
    public void Send(string name, string message, params string[] groups)
    {
        this.Clients.Groups(groups).broadcast(name, message);
    }
}

有没有办法向属于任何群组成员的用户发送单个消息?换句话说,如果上面的groups参数定义为["grpA","grpB"],我希望发生以下情况:

  • 用户1,grpA成员:1条消息
  • 用户2,grpB成员:1条消息
  • 用户3,grpA和grpB的成员: 1条消息
  • 用户4,grpA和grpC成员:1条消息
  • 用户5,grpC成员:0条消息

2 个答案:

答案 0 :(得分:2)

除了创建自己的方式来跟踪每个群组中的用户以及在广播之前/之后自己跟踪不同用户之外,还有其他方法无法做到这一点。

可能会在将来的版本中引入此API,但目前还没有办法实现。

答案 1 :(得分:1)

目前在signalR中没有这样的功能。要实现此功能,您可以将连接存储在包含

信息的数据库内存中的某个位置

MemberID,GroupID,SignalRConnectionID

然后获取特定组成员的不同connectionID,并使用类似

的语法向他们发送消息
List<String> connectionIDs = #GET DISTINCT LIST OF CONNECTIONS FROM DB OR IN MEMORY STORAGE#;

Clients.Clients(connectionIDs).broadcast(name, message);