2009-12-22 151 views
3

我们正在开发基于浏览器的社交游戏,并且它是一款MMORPG游戏。我们使用html/javascript/css作为前端技术(与闪存相比)。当用户第一次加载我们的游戏时,会下载一堆文件(外部js/css),并会请求几个ajax调用。除非用户手动刷新页面,否则整个页面将不会再次加载。我们创建一个js对象来存储用户特定的数据,如现金,水平等。它在用户即将到来的操作过程中可能会发生变化。所以我们需要同步来自后端的数据。一个特殊的问题是用户的数据也可以被动地更新(由其他用户),这可能发生在其他用户的战斗中。所以我的问题是如何以及何时同步?直到现在我们经历了两个阶段,1)每当用户点击标签(在html中显示/隐藏div)或可能的操作(如打架/买东西),然后我们调用ajax请求获取新数据从数据库每次。 2)与1)类似,但我们只是添加一个代理来指示用户的数据是否更改,以减少无用的数据库查询。 ajax调用将首先进入代理。在前端和后端之间同步数据

1)我们可能有70%+无用的Ajax调用和的数据库查询

2)我们可能有70%+无用AJAX调用

现在我们用2)的方法。但我不认为这是最好的解决方案,因为我们仍然有70%+无用的ajax调用。所以有没有比这个用例更好的解决方案?


解释

无用AJAX调用:自2个AJAX调用之间的间隔中,用户数据可以不改变的。

回答

2

好问题,我认为最好的解决方案是实施服务器推送。这个想法很简单,因为你有客户端和服务器之间的连接,服务器知道数据何时被修改,因此他可以通知客户端(在你的情况下html/javascript/css)有关任何改变。这应该消除无用的轮询(你的ajax调用)。现在

,你可能要检查了这一点,或者只是谷歌搜索等阿贾克斯推解决方案: http://www.icefaces.org/main/ajax-java/ajaxpush.iface

这也将取决于您使用的应用程序服务器的技术,在最坏的情况下,你将不得不实现你自己的Ajax Push。

0

我同意Kel在这里Ajax-Push AKA Comet是最好的解决方案。
我已经从经验中知道Persevere是一个很好的解决方案,它与Dojo toolkit效果最好。
如果性能至关重要,我还可以建议您尝试Wt,因为它允许使用C++编写网站。 他们两人都是您的需求的绝佳选择。