3

我们正在开发一款基于浏览器的社交游戏,它是一款MMORPG游戏。我们使用 html/javascript/css 作为前端技术(与 flash 相比)。当用户第一次加载我们的游戏时,会下载一堆文件(外部 js/css)并且会请求几个 ajax 调用。除非用户手动刷新页面,否则不会再次加载整个页面。我们创建一个 js 对象来存储用户特定的数据,如现金、级别等。并且在用户即将进行的操作过程中可能会发生变化。所以我们需要从后端同步数据。一个特殊的问题是用户的数据也可以被动更新(由其他用户),这可能发生在其他用户的战斗中。所以我的问题是如何以及何时同步?

到目前为止,我们经历了两个阶段,1)当用户点击标签(在 html 中显示/隐藏 div)或可能的操作(比如打/买东西)时,我们每次调用 ajax 请求从数据库中获取新数据. 2) 与1) 类似,但我们只是添加了一个代理来指示用户的数据是否更改,以减少无用的数据库查询。ajax 调用将首先转到代理。

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

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

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


解释

无用的ajax调用:由于两次ajax调用之间的间隔,用户数据可能根本没有变化。

4

2 回答 2

2

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

现在,您可能想检查一下,或者只是在 google 上搜索其他Ajax Push解决方案:http: //www.icefaces.org/main/ajax-java/ajaxpush.iface

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

于 2009-12-26T14:05:34.247 回答
0

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

于 2009-12-26T14:14:13.387 回答