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

问题描述 投票:3回答:2

我们正在开发基于浏览器的社交游戏,它是一款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调用之间的间隔,用户数据可能根本不会改变。

ajax comet ajax-push
2个回答
2
投票

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

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

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


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.