我在Meteor做了一个简单的射击游戏。我仍然是Javascript的新手,所以我很确定我的代码不是最有效的。
无论如何,一切都在localhost上运行得很好(当然),在我部署的时候,大多数情况下看起来都没问题。然而,有时会出现大量延迟,客户将无法赶上长达30秒。画布在客户端上每10ms更新一次,在服务器上更新100ms。
这是游戏: http://yujiangtham.com/jfleet/
来源: https://github.com/ytham/jfleet
我不知道从哪里开始调试这个。可能是因为:
a)Mongodb不是为如此多的快速读/写而构建的?
b)某个地方有什么东西滞后并造成某种级联滞后?c)在画布上更新这么多HTML元素会导致客户端滞后吗?
老实说,我很难过。任何正确方向的指针都会很棒。谢谢!
答案 0 :(得分:1)
所以,我和一位以前经历过一些事情的朋友谈过。基本上,解决这个问题的方法是不要经常写入数据库。在如此短的时间内,它无法处理那么多的写入。
基本上,他告诉我这样做的方法是让客户端和服务器分别计算所有运动向量。从那里,客户端和服务器都应该预测每个精灵应该在哪里,然后让它们每200毫秒左右进行比较。任何差异都应该被服务器覆盖并写入数据库。然后将该数据发送回客户端并覆盖任何差异。我还没有真正实现这个,因为它需要一些花哨的数学,但希望我能尽快解决它......