这些天我正在尝试为我的公司设计一款新的 MMORPG 手机游戏的架构。此游戏类似于 Mafia Wars、iMobsters 或 RISK。基本思想是准备一支军队来与你的对手(在线用户)作战。
虽然我之前曾开发过多个移动应用程序,但这对我来说是新事物。经过一番努力,我想出了一个架构,在高级流程图的帮助下进行了说明:
我们决定采用客户端-服务器模型。服务器上将有一个集中式数据库。每个客户端都有自己的本地数据库,该数据库将与服务器保持同步。该数据库充当缓存,用于存储不经常更改的内容,例如 map 、产品、库存等。
有了这个模型,我不确定如何解决以下问题:
我不确定这是否是一个有效的解决方案以及它将如何扩展。如果已经使用过此类应用程序的人可以分享他们的经验,这可能会帮助我提出更好的建议,我将不胜感激。提前致谢。
附加信息:
客户端是在名为 marmalade 的 C++ 游戏引擎中实现的。这是一个跨平台游戏引擎,这意味着您可以在所有主要移动操作系统上运行您的应用程序。我们当然可以实现线程化,这也在我的流程图中进行了说明。我打算将 MySQL 用于服务器,将 SQLite 用于客户端。
这不是回合制游戏,因此与其他玩家没有太多互动。服务器将提供在线玩家列表,您可以通过单击战斗按钮与他们进行战斗,经过一些动画后,将宣布结果。
对于数据库同步,我有两个解决方案:
最后更新。同步时,只选择那些
有一个更大的时间戳并发送到本地数据库。保留一个 isDeleted 标志
对于已删除的行,因此每次删除都只是一种更新。但
对于我们的每个同步请求,我都对性能表示严重怀疑
必须扫描整个数据库并查找更新的行。
发生在用户身上。当客户端应用程序要求同步时,
转到此表并找出哪个表的哪些行
更新或插入。一旦这些行成功转移到
客户端删除此日志。但后来我想到如果用户
使用另一个设备。根据日志表,所有更新都已
为该用户转移,但实际上是在另一个用户上完成的
设备。因此,我们可能还必须跟踪设备。实现
这种技术比较耗时,但不确定是否可行
执行第一个。
最佳答案
我看到两个潜在问题隐藏在以下事实中:您将所有状态存储在客户端上,然后使用后台线程更新服务器上的状态。
关于mobile - 这是适合我们 MMORPG 手机游戏的架构吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7657678/