2

nodeJS サーバーが 2 人の待機中のプレイヤーごとに別々にラウンド ゲームを準備するように、すべてのユーザーが同じ waitingList でプレイするリクエストをプッシュする、firebase ベースのゲーム。nodeJS で Firebase JS v3 を使用しています。

    var ref = firebase.database().ref();

//this is where we populate rounds
var gamesRef = ref.child('games');

//users path
var usersRef = ref.child('users');

//waiting queue
var waitingRef = ref.child('waitingList');

//listen for each new queued user
waitingRef.on('child_added', function(snap){ 
  waitingRef.transaction(function(waitingList){
    if(waitingList !== null){
      var keys = Object.keys(waitingList);
      //take two players
      if(keys.length >= 2){
        //prepare a new round for users
        var round = prepareNewRound(waitingList[keys[0]], waitingList[keys[1]]);

        //remove queued users from waitingList
        waitingList.child(keys[0]).remove();
        waitingList.child(keys[1]).remove();

        //create new game
        var roundKey = gamesRef.push(round).key;

        //notify users about the new game created
        users.child(waitingList[keys[0]]).child('current_round').set(roundKey);
        users.child(waitingList[keys[1]]).child('current_round').set(roundKey);
      }
    }
  });
});

待機リストは、同時リアルタイム ユーザー数が 10,000 を超える可能性があるユーザーからのリクエストが非常に多いものです。この方法は、Firebase-queue よりも高速に実行されますが、5 分ごとに 1 分の速度低下が繰り返され、待機リストが長くなり、後で正常になります。コンセプトに対して可能な最適化はありますか?

4

0 に答える 0