【问题标题】:Send message to filtered clients向过滤的客户端发送消息
【发布时间】:2014-05-10 03:08:51
【问题描述】:

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

有多个游戏同时进行。每场比赛有2名玩家。我想使用带有推送通知的异步通信。更准确地说,当我决定没有时间通知玩家我想向他们推送通知的事情时。但不是对所有玩家,只对与特定游戏相关的两个玩家。

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

Clients.Caller.GameStatusUpdated(status);

这样我就不能呼叫第二个玩家了。我以为我可以只存储 Clients.Caller 对象,但我发现每次调用(即使来自同一个客户端集线器,仍然连接)都会创建一个新的服务器集线器实例。 Clients.Caller的hashcode也每次都不一样。

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

【问题讨论】:

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


    【解决方案1】:

    我认为SignalR groups 会解决您的问题。我认为您会希望将每个单独游戏的每个玩家添加到一个独特的组中。然后,您就可以使用Clients.Group(game). GameStatusUpdated(status) 仅向个别游戏组告知更新。

    【讨论】:

      【解决方案2】:

      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.

      【讨论】:

        猜你喜欢
        • 2012-01-18
        • 2023-03-11
        • 2020-07-10
        • 2015-04-07
        • 2019-04-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多