说起高性能的网络游戏,有2个典范,1个是暴雪的WOW,另外一个要数腾讯的QQGame了,因为对于MMPRPG的体系接触不深,几乎属于文盲,没有太多的发言权,而自己又是搞休闲游戏开发的所以本文就主要谈谈QQGame了。 前些天通过朋友得到了QQGame的一个系统分析的文档,看完后很是震惊,彻底被QQ的设计所折服了,到底是千万人在线系统经验的拥有者,牛! 通过资料了解到QQGame目前有以下让我欣赏的特性:
作为游戏服务器的结构方面(以下只讨论休闲游戏部分,MMORPG服务器不属于讨论范围)的设计已经相对于成熟并且统一, 结构方面和3年前我所接触的中游系的那套平台没有太大的差异,无非是服务器群采用星状的结构,以1个中心节点作为核心,然后向四周扩散出一些应用服务器, 如负责登陆的LoginServer,负责具体游戏逻辑的GameServer等等,当然最精简的结构是这样的,这样的结构可以满足50万以下同时在线的 容量,如果为了满足更大的容量,如QQGAME这样的目前已经有200万以上同时在线的超大容量的应用则需要额外的优化,从这个结构中分离出一些子应用独 立开发出一些服务器端来处理,一方面降低偶合度,另外一方面作为高可用性系统为负载均衡提供条件. 关于负载均衡,作为整个游戏平台的所有服务器.我觉得除了具体的游戏逻辑服务器以外都是可以采用负载均衡,多点分担的方式 来处理,惟独逻辑服务器不可以,因为休闲游戏,都是分层次的,不管泡泡堂也好,QQGAME也好这些游戏其实在客户端的表现形式都是分层次的,如 QQGAME就是LOBBY-HALL-ROOM这样的结构,LOBBY这层就是游戏广场了,可以看到所有的游戏类别,游戏服务器和具体的游戏大厅,比 如:牌类–斗地主–新手场–新手场1 这样的顺序,传统的设计中新手场1就是属于一个独立的游戏逻辑服务器拥有一个独立的IP以及侦听端口,在服务器端通常也是一个独立的进程.一般的游戏服务 器允许的连接数通常都是300-600人之间超过的就提示服务器已满了,这样做的原因并不是因为进程的限制因为一个进程完全可以做到同时让3000以上的 玩家同时游戏,而是人为设计的考虑,因为在游戏逻辑服务器中有很多需要广播的消息,如游戏玩家的聊天信息,某个房间的开始信息,结束信息,某人进出的信息 等,而对于广播来说,给300个人广播和给3000个人广播所消耗的资源是绝对没有可比性的。但是通过从进程上独立来处理这个传统的方式也有个缺陷,比如 通过开10个进程来达到3000人和1个进程达到3000人,如果不考虑广播的因素在内的话前者的资源是要高与后者的资源的,并且进程间的通讯也要比进程 内的通讯要耗费资源和复杂度方面要高很多,比如说如果要实现一个需求让玩家可以在同一类游戏中可以使用小喇叭类或者跨游戏服务器找人之类的功能的话,同一 个进程的优势就显示出来了,为此QQGAME所使用的是Channel(频道)的概念,即一个游戏逻辑服务器的进程可以容纳5000人左右,然后服务器端 通过设置分割出很多的Channel如新手1,新手2,新手3之类的传统意义上的游戏大厅,将消息的分发范围进行隔离,节约了资源。这一点可以通过查看连 接属性看到,连接QQGAME的同类型靠近的几个游戏大厅其实端口和IP都是一致的。 我们目前的游戏服务器类型主要有3类:CenterServer,管理着所有的服务器连接,LoginServer 负责处理用户的登陆、注册,并且用来给用户传递游戏逻辑服务器列表等功能, GameServer具体逻辑服务器,根据不同的逻辑来实现不同的游戏需求。 当然,根据业务的发展需要,我们正准备把用户的状态在服务器端保存,并且增加一个类似IM服务器的功能来满足玩家跨服务器聊天和查询其他玩家状态的需要。以及GM服务器实现多功能的网管室的需求,这些将在以后慢慢写。 今天开始写些技术的题材,一方面记录一些自己的本分工作的东西,另外一方面也是充实一下BLOG,工作太忙也没有什么太多的思绪来一直写其他的题材,所以就拿工作来填充了.同时如果有人有幸看到了这些文章,并且也有兴趣的话也希望多多探讨. 先简单介绍一下,由于本人的工作就是游戏开发公司的,一直与游戏开发打交道,主要做休闲类的游戏,目前又以棋牌游戏为主, 在这个行业中摸爬滚打了整3年了,从运营开始做起,运营过当时国内一流的游戏平台中游系列的产品,然后由于合作方面的原因又自主开发过一套游戏平台,然后 由于发展方向上的分歧出来单独做,目前在开发并运维一套全新的产品. 这篇主要是对于游戏服务器的一些想法,结合目前自身的产品的一些问题延伸开来的. 目前我们的服务器还是属于Windows平台的架构,暂时还没有考虑到跨平台,主要原因有2: |
联系客服