在前端和后端之间同步数据

时间:2009-12-22 09:52:04

标签: ajax comet ajax-push

我们正在开发基于浏览器的社交游戏,它是一款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 个答案:

答案 0 :(得分:2)

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

现在,您可能需要查看此内容,或者只是在谷歌搜索其他 Ajax Push 解决方案: http://www.icefaces.org/main/ajax-java/ajaxpush.iface

这还取决于您用于应用程序服务器的技术,在最坏的情况下,您必须实现自己的Ajax推送。

答案 1 :(得分:0)

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