使用Firebase实时数据库为两人回合制游戏构建和检索数据的最有效方法

时间:2019-01-31 21:38:48

标签: javascript firebase firebase-realtime-database

我想知道以下用于存储数据然后检索它的结构是否有效,或者是否有更好的方法。我的代码确实可以正常工作,但是我担心如果传输/处理的数据超过了需要的数量。

这是一个两人回合制游戏。玩家1将他的动作发送到实时数据库,而玩家2检索它。重要的是,他必须以正确的顺序(即与玩家1发送的顺序相同)来检索移动。

这是我用来将球员的动作发送到数据库的代码:

multiplayer.sendMove = function(roomRef, turnNum, vectorX, vectorY){

    var currentMove = {

                n: turnNum,
                x: vectorX,
                y: vectorY            
    };

    var moveRef = roomRef.child("moves").push();

    moveRef.set(currentMove, function(error) {
        if (error) {
            console.log("Error sending move.", error);    
        } else { 
            console.log("move sent");    
        }
    })

}

这将在数据库中创建以下种类的条目:

{
  "rooms": {
    "-LXU8-36ISMY8YZnI7fr": {
      "moves": {
        "-LXZv-7zMCZdrH7ffoWf": {"n": 1, "x": 532, "y": 242},
        "-LXZv7LlQTkBEtls0PP2": {"n": 2, "x": 352, "y": 944}
      }
    }
  }
} 

最后,我使用以下方法检索与当前回合对应的移动:

function listenForOpponentMove(roomRef, turnNum){

  var moveRef = roomRef.child('moves').orderByChild("n").equalTo(turnNum);

  moveRef.on('child_added', function(snapshot){

    if(snapshot.val()){

      var move = snapshot.val();
      console.log("move received: x = " + move.x + ", y = " + move.y);
    }
  })
}

我特别担心的是,随着一场比赛的回合次数增加,并且假设我最终希望为每个动作存储的数据不仅限于x和y值,那是当我在“动作”中进行搜索时对于当前的转弯节点,它将遍历大量数据。我尚不清楚的是,“动作”节点中的所有数据是否都将在每次添加孩子时都转移到客户端,或者仅是当前匹配我使用“ orderByChild'。

非常感谢。

0 个答案:

没有答案