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);
// ...

类似的东西。当玩家在世界各地移动时,我很确定我需要保持 4 到 9 个对 Firebase 的引用才能进行更改。这取决于我如何构建数据,这可能会增加一倍或三倍:其他玩家是存储在world/树中还是其他地方?那种事。

我不希望播放器的浏览器获得它不关心的更新。我想在玩家四处移动时“过期”旧的 refs,这样浏览器就不会花费资源来谈论遥远的世界。

让 ref 实例超出范围并获得 GC 就足够了吗?或者我还需要做些什么来通知裁判我不想再使用它了吗?

我想到的另一件事不是担心有多少 refs,而是跟踪on回调。当玩家离开世界特定区域的范围时,我可以off设置任何回调。这足以让我的裁判停止与 Firebase 交谈吗?

4

1 回答 1

7

Firebase 仅保留一个打开的连接(使用 Web 套接字)来处理与单个 Firebase 实例的通信,即使您为其创建了多个 refs。所以就像你说的 - 只要你“关闭”非活动裁判上的任何事件,你应该是好的。

您可能希望在开发过程中考虑启用 Firebase 调试日志记录。它将让您看到浏览器与其服务器之间发生的所有通信。这样,您将能够验证客户端是否仅获得必要的更新。要启用调试日志记录,请在创建第一个 Firebase 引用之前的任意位置添加以下行:

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