腾讯QQgame分布式架构

腾讯QQgame分布式架构


2024年5月13日发(作者:u盘写保护无法格式化如何恢复u盘)

腾讯QQGame游戏同时在线的玩家数量极其庞大,为了方便组织玩家组队游戏,腾

讯设置了大量游戏室(房间),玩家可以选择进入属意的房间,并在此房间内找到可以加入

的游戏组(牌桌、棋盘等)。玩家选择进入某个房间时,必须确保此房间当前人数未满(通

常上限为400),否则进入步骤将会失败。玩家在登入QQGame后,会从服务器端获取某

类游戏下所有房间的当前人数数据,玩家可以据此找到未满的房间以便进入。

如上篇所述的原因,如果待进入房间的人数接近上限时,玩家的进入请求可能失败,

这是因为服务器在收到此进入请求之前可能有若干其他玩家也请求进入这个房间,造成房

间人数达到上限。这一问题是无法通过上篇所述调整协作分配的方法来解决的,这是因为:

要进入的房间是由玩家来指定的,无法在服务器端完成此项工作,游戏软件必须将服务器

端所维护的所有房间人数数据复制到玩家的客户端,并让玩家在界面上看到这些数据,以

便进行选择。这样,上篇所述的客户端与服务器端协作分配原则(谁掌握数据,谁干活),

还得加上一些限制条件,并让位于另一个所谓"用户驱动客户端行为"原则--如果某个功能

的执行是由用户来推动的,则这个功能的实现应当放在客户端(或者至少由客户端来控制

整个协作),并且客户端必须持有此功能所依赖相关数据的副本,这个副本应当尽量与服务

器端的源保持同步。

图一"进入房间"失败示意

注意:点击图片可以放大观看

QQGame还存在一个明显的不足,就是:玩家如果在游戏一段时间后,离开了某个

房间,并且想进入其它房间,这时QQGame并不会刷新所有房间的当前人数,造成玩家

据此信息所选的待进入房间往往实际上人数已满,使得进入步骤失败。笔者碰到的最糟情

形是重复3、4次以上,才最后成功进入另外某个房间。此缺陷其实质是完全放弃了客户

端数据副本与服务器端的源保持同步的原则。

实际上,QQGame的开发者有非常充分的理由来为此缺陷的存在进行辩护:QQGame

同时在线的用户数超过百万甚至千万数量级,如果所有客户端要实时(所谓实时,就玩家

的体验容忍度而言,可以定为不超过1秒的延迟)地从服务器端获取更新数据,那么最终

只有一个结果--系统彻底崩溃。设想一下每秒千万次请求的吞吐量,以普通服务器每秒上


发布者:admin,转转请注明出处:http://www.yc00.com/xitong/1715605555a2643823.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信