常见的网游服务器通信架构概述

逛CSDN时看到一个帖.
常见的网游服务器通信架构概述
转自
目前,国内的网游市场中大体存在两种类型的网游游戏:MMORPG(如:魔兽世界)和休闲网游(如:QQ休闲游戏和联众游戏,而如泡泡堂一类的游戏与QQ休闲游戏有很多相同点,因此也归为此类)。由于二者在游戏风格上的截然不同,导致了他们在通信架构设计思路上的较大差别。下面笔者将分别描述这两种网游的通信架构。

1.MMORPG类网游的通信架构
网游的通信架构,通常是根据几个方面来确定的:游戏的功能组成、游戏的预计上线人数以及游戏的可扩展性。
目前比较通用的MMORPG游戏流程是这样的:

a. 玩家到游戏官方网站注册用户名和密码。
b. 注册完成后,玩家选择在某一个区激活游戏账号。
c. 玩家在游戏客户端中登录进入已经被激活的游戏分区,建立游戏角色进行游戏。

通常,在这样的模式下,玩家的角色数据是不能跨区使用的,即:在A区建立的游戏角色在B区是无法使用的,各区之间的数据保持各自独立性。我们将这样独立的A区或B区称为一个独立的服务器组,一个独立的服务器组就是一个相对完整的游戏世界。而网游服务器的通信架构设计,则包括了基于服务器组之上的整个游戏世界的通信架构,以及在一个服务器组之内的服务器通信架构。

我们先来看看单独的服务器组内部的通信是如何设计的。
一个服务器组内的各服务器组成,要依据游戏功能进行划分。不同的游戏内容策划会对服务器的组成造成不同的影响。一般地,我们可以将一个组内的服务器简单地分成两类:场景相关的(如:行走、战斗等)以及场景不相关的(如:公会聊天、不受区域限制的贸易等)。为了保证游戏的流畅性,可以将这两类不同的功能分别交由不同的服务器去各自完成。另外,对于那些在服务器运行中进行的比较耗时的计算,一般也会将其单独提炼出来,交由单独的线程或单独的进程去完成。

各个网游项目会根据游戏特点的不同,而灵活选择自己的服务器组成方案。经常可以见到的一种方案是:场景服务器、非场景服务器、服务器管理器、AI服务器以及数据库代理服务器。
以上各服务器的主要功能是:

场景服务器:它负责完成主要的游戏逻辑,这些逻辑包括:角色在游戏场景中的进入与退出、角色的行走与跑动、角色战斗(包括打怪)、任务的认领等。场景服务器设计的好坏是整个游戏世界服务器性能差异的主要体现,它的设计难度不仅仅在于通信模型方面,更主要的是整个服务器的体系架构和同步机制的设计。

非场景服务器:它主要负责完成与游戏场景不相关的游戏逻辑,这些逻辑不依靠游戏的地图系统也能正常进行,比如公会聊天或世界聊天,之所以把它从场景服务器中独立出来,是为了节省场景服务器的CPU和带宽资源,让场景服务器能够尽可能快地处理那些对游戏流畅性影响较大的游戏逻辑。

服务器管理器:为了实现众多的场景服务器之间以及场景服务器与非场景服务器之间的数据同步,我们必须建立一个统一的管理者,这个管理者就是服务器组中的服务器管理器。它的任务主要是在各服务器之间作数据同步,比如玩家上下线信息的同步。其最主要的功能还是完成场景切换时的数据同步。当玩家需要从一个场景A切换到另一个场景B时,服务器管理器负责将玩家的数据从场景A转移到场景B,并通过协议通知这两个场景数据同步的开始与结束。所以,为了实现这些内容繁杂的数据同步任务,服务器管理器通常会与所有的场景服务器和非场景服务器保持socket连接。

AI(人工智能)服务器:由于怪物的人工智能计算非常消耗系统资源,所以我们把它独立成单独的服务器。AI服务器的主要作用是负责计算怪物的AI,并将计算结果返回给场景服务器,也就是说,AI服务器是单独为场景服务器服务的,它完成从场景服务器交过来的计算任务,并将计算结果返回给场景服务器。所以,从网络通信方面来说,AI服务器只与众多场景服务器保持socket连接。

数据库代理服务器:在网游的数据库读写方面,通常有两种作法,一种是在应用服务器中直接加进数据库访问的代码进行数据库访问,还有一种方式是将数据库读写独立出来,单独作成数据库代理,由它统一进行数据库访问并返回访问结果。

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×