3

ブラウザで完全に実行される大規模なリアルタイムの 2D オープンワールド スタイルのゲームを作成したいとしましょう。そのために Firebase を使用したいと考えていました。

セキュリティに関する質問は脇に置いておきます。後で聞いてみます。( =

プレイヤーは (0,0) から開始し、任意の方向に移動できます。指定された x、y 座標が、Firebase ref の生成に使用できる単一の (またはネストされた) キーになるように、世界を空間的にハッシュします。

var getKey = function(x, y) {
  return Math.floor(x / 100) + ':' + Math.floor(y / 100);
}

var key = getKey(currX, currY);

var ref = new Firebase('https://whatever.firebaseio.com/world/' + key);
// ...

そんな感じ。プレイヤーが世界を動き回るにつれて、変更を取得するために Firebase への 4 ~ 9 個の参照を維持する必要があると確信しています。データをどのように構造化するかによって、これも 2 倍または 3 倍になる可能性があります。他のプレイヤーはworld/ツリーに保存されているのでしょうか、それとも他の場所に保存されているのでしょうか? そういうこと。

プレーヤーのブラウザが気にしない更新を取得したくありません。プレーヤーが移動するときに古い参照を「期限切れ」にして、ブラウザが世界の遠く離れたスライスについてチャットするリソースを消費しないようにしたいと思います。

ref インスタンスを範囲外にして GC するだけで十分ですか? それとも、もう使用したくないことをrefに通知するために他に何かしなければならないことがありますか?

私が考えたもう 1 つのことは、ref の数を気にするのではなく、on代わりにコールバックを追跡することでした。プレイヤーが世界の特定のセクションの範囲外に移動すると、off設定したコールバックが発生する可能性があります。参照が Firebase との通信を停止するには、それで十分でしょうか?

4

1 に答える 1

7

Firebase は、単一の Firebase インスタンスへの通信を処理するために (Web ソケットを使用して) 開いている接続を 1 つだけ保持します。あなたが言ったように、非アクティブな参照のイベントを「オフ」にしている限り、うまくいくはずです。

開発中に Firebase のデバッグ ロギングを有効にすることを検討してください。ブラウザとサーバーの間で行われるすべての通信を確認できます。これにより、クライアントが必要な更新のみを取得していることを確認できます。デバッグ ロギングを有効にするには、最初の Firebase ref を作成する前に次の行を任意の場所に追加します。

Firebase.enableLogging(true);
于 2013-09-20T17:11:37.193 に答える