ブラウザで完全に実行される大規模なリアルタイムの 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 との通信を停止するには、それで十分でしょうか?