drh*_*yes 3 javascript web-applications firebase
假设我想制作一个完全在浏览器中运行的大型,实时,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);
// ...
Run Code Online (Sandbox Code Playgroud)
这样的事情.当玩家在世界各地移动时,我非常确定我需要保留4到9个参考值,以使Firebase保持活跃状态以进行更改.这可能会增加一倍或三倍,这取决于我如何构建数据:是否存储在world/树中或其他地方的其他玩家?那种事.
我不希望播放器的浏览器获得它不关心的更新.当玩家四处移动时,我想"过期"旧的参考,因此浏览器不会花费资源聊聊世界上遥远的片段.
是否足以让ref实例超出范围并获得GCed?或者还有什么我必须做的事情来通知裁判我不想再使用它了吗?
我想到的另一件事并不是担心有多少参考,而是追踪on回调.当玩家离开世界特定区域的范围时,我可以进行off任何回调.这足以让我的裁判停止与Firebase交谈吗?
Firebase仅保留一个打开的连接(使用Web套接字)来处理与单个Firebase实例的通信,即使您为其创建多个引用也是如此.就像你说的那样 - 只要你'关闭'非活动裁判上的任何事件,你应该是好的.
您可能希望考虑在开发期间启用Firebase调试日志记录.它将让您看到浏览器与其服务器之间发生的所有通信.这样,您将能够验证客户端是否只获得必要的更新.要启用调试日志记录,请在创建第一个Firebase ref之前的任何位置添加以下行:
Firebase.enableLogging(true);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
885 次 |
| 最近记录: |