用firebase创建匹配室

时间:2016-02-09 00:47:50

标签: firebase

我正在构建一个游戏,其中有一些人可以玩,生活

我使用firebase共享用户相关数据并从heroku上的后端nodeJS获取更新。到目前为止一直很好,但我有一个主要要求,我还没有完全想出使用firebase和NodeJS后端构建

可能有大量用户希望玩游戏。我想匹配这些用户的k并为他们分配一个独特的游戏室ID,然后他们可以“玩”。为了这个问题,我们可以省略实际的“游戏”。

所以我想创建一组随机的k用户,这就是我想要接近它的方法,我想知道这是一个好方法还是一个糟糕的方法。如果有更简单的方法可以实现这一目标,我还想了解更多建议:

  1. 现场玩家在我的Firebase商店指出他们想玩 使用状态变量
  2. Heroku上的NodeJS后端每隔几秒运行一次以确保系统 有一个很好的'组合'的球员。当它运行时,它使用Firebase REST API拉出所有等待的Live玩家(这是一个好主意吗?)
  3. 然后将这些现场球员分成Firebase Queue。确实如此 通过获取1000 * k直播用户并创建1个任务。因此它可能 在每项任务中创建1000 * k个用户的许多此类任务。
  4. 我想补充一点,如果单个队列工作者有办法访问多个任务,那么我更喜欢这样。在这种情况下,步骤2几乎不是必需的,因为实时播放器可以将自己添加到队列中,并且单个工作人员可以访问这些用户中的k个以将它们匹配在一起 - 这是否可以使用当前的Firebase队列?

    1. 队列工作人员接受任务并进行1000场比赛并写下这些 匹配firebase中的players节点中的详细信息
    2. 现在,在他们的节点上等待的玩家将与一个独特的游戏室相匹配 id和k其他玩家

1 个答案:

答案 0 :(得分:2)

让我先说明这是一个概念性答案,并不直接涉及Firebase队列。这些可以相应地利用。

我们不知道创造一个好的混合球员的标准是什么,但让我用一个典型的魔兽地牢组拍摄。该组将有5名球员;一个坦克(领导者)一个治疗师和三个造成伤害的球员(dps)

在这个例子中,似乎可以通过观察每个game_room节点的变化来呈现解决方案,并且还可以观察waiting_players节点的变化。

示例结构:

game_room_0   
  current_players
       player_0
         type: tank
       player_1
         type: healer
       player_3
         type: dps
       player_4
         type: dps
       player_5
         type: dps

waiting_players
       player_6
         type: dps
       player_7
         type: healer

会有x个游戏室,每个游戏室需要5个玩家。

该应用会观察当前播放器节点(在每个游戏室中)以移除播放器。

它还将观察waiting_players节点以添加玩家

当玩家离开game_room / current_players节点时,例如player_0,坦克(哦不!)你的应用程序将被通知该更改,然后可以在waiting_players节点查询type = tank。

此时它将有一个等待坦克列表,可以随机选择一个或进一步缩小标准以获得更好的混合。然后将它添加到需要坦克的游戏室中。

在这种情况下,没有坦克等待,但应用程序正在观察该节点,所以当一个新的玩家被添加到waiting_players节点(玩家表示他想要玩)时,应用程序会被通知该添加的玩家如果它是一个坦克,它们可以被放入游戏室以替换剩下的那个。

这种方法可以避免必须加载所有等待的玩家,因为应用程序将知道需要哪些特定的玩家。由于应用依赖Firebase事件,因此还可以减轻应用的负担,即可获得1000 * k任务。

最后,它可以响应离开或被添加的玩家以避免轮询,甚至减少对Firebase队列的依赖

如果这是不合适的,请告诉我。