您的位置:首页 > 理论基础 > 计算机网络

网络游戏中,玩家数据同步的一种简单实现

2009-04-24 10:48 337 查看
对于大型的网游,由于架构的需要, 根据分而治之的方法论, 需要我们为不同功能的操作, 划分为多台服务器,甚至数十台, 方能完成整个系统的完美运作. 所以普遍存在多台服务器的共同协作, 也是网络游戏系统必然的现象. 玩家作为一个游戏平台内, Use Cases的主要Actor. 由于后台管理的需要, 以及抽像世界的数据更新频繁, 导致经常有出现玩家的个人数据, 需要在后台管理终端进行相应的操作玩家的数据, 以及来自于当前那台和玩家数据有关系的游戏服务器, 同时如果有多人在一个场景, 还要考虑游戏服务器对该场景的客户端进行多播服务... 一切的一切, 最终, 为了达到实现数据同步的目的, 为了更好地控制和简化服务器之间的相互依赖性. 我们需要专设一台仅用于内部服务器使用的player data center(just memory database only), 这个服务器将专注于维护玩家数据的独立服务器,该服务器主要负责对玩家的数据管理. 它主要的使命职责如下:

1) 内存Cache每一个角色的重要玩家数值数据;

2) 服务器一启动, 将开始初始化服务器状态, 并等待远程玩家登陆系统, 只要一旦有需求, 服务器将对物理数据库进行Read操作, 读入内存map方式的玩家数据结构中, 然后将随着不断的外部接口操作数据的更新, 服务器将一直进行保持物理I/O的同步方式控制内存的cache数据, 以队列的方式更新到持久性数据库系统中;

3) 提供一个投注/输赢分数的网络协议接口给玩家数据操作服务器,所有的玩家数据管理仅仅该服务器完全控制,永久保持最新的数据,其它的服务器(后台管理、游戏服务器仅仅用于对玩家的数据进行增/删,并不具有玩家数据的控制权)。
这样一来,就可保证玩家随时登陆游戏,进行获取的数据是最新的,不会产生数据不同步的现象, 另外, 由于内存数据库的关系, 所以又能确保后台数据库的最大并发性问题。

当然这只是一种简单的实现方式, 具体的操作和扩展或是实现, 都要根据实际的应用和需求来决定的. ^_^
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐