发送消息给过滤的客户端

时间:2014-03-30 21:54:38

标签: c# asp.net-mvc asp.net-mvc-4 signalr signalr-hub

我正在创建一个网页浏览器黑白棋游戏。我使用SignalR进行通信。我已经在服务器和一个客户端之间实现了2方通信。现在我遇到了一个问题。

同时有多个游戏在进行。每场比赛有2名球员。我想使用推送通知的异步通信。更准确地说,当我决定时间没有通知玩家我想要通知他们的事情。但给所有玩家,只有两个连接到某个游戏。

到目前为止(将数据发送回调用者)我这样做:

Clients.Caller.GameStatusUpdated(status);

这样我就不能给第二个玩家打电话了。我以为我可以存储Clients.Caller对象,但我发现每个调用(甚至来自同一个客户端集线器,仍然连接)都会创建服务器集线器的新实例。 Clients.Caller的哈希码每次都不同。

什么是正确的方式去这里?

2 个答案:

答案 0 :(得分:3)

我认为SignalR groups会解决您的问题。我想你想要将每个游戏的每个玩家添加到一个独特的组中。然后,您就可以使用Clients.Group(game). GameStatusUpdated(status)告诉单个游戏组有关更新的信息。

答案 1 :(得分:1)

You can take a loot at groups

当用户加入游戏时,您只需将其添加到群组中:

public Task JoinRoom(string roomName)
{
    return Groups.Add(Context.ConnectionId, roomName);
}

确保每场比赛有一组(即每场比赛一个名称)。

然后,您可以与同一组中的所有用户(在我们的示例中为roomName)进行通信

Clients.Group(roomName).GameStatusUpdated(status)

离开小组:

public Task LeaveRoom(string roomName)
{
    return Groups.Remove(Context.ConnectionId, roomName);
}

群组不是唯一的解决方案。您可以使用内存映射或数据库映射。 Take a look here.

相关问题