我想知道以下用于存储数据然后检索它的结构是否有效,或者是否有更好的方法。我的代码确实可以正常工作,但是我担心如果传输/处理的数据超过了需要的数量。
这是一个两人回合制游戏。玩家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'。
非常感谢。