关于网游分布式服务器的讨论?

LiWang112358 2010-10-30 11:22:00
加精
如题
请大家讨论一下网游服务器端结构设计方面的问题。
希望大家畅所欲言,能说说细节更好。
还有关于网络游戏其他方面的问题也可以。

在此先摘篇文章

随着网游从业者的规模和需求不断扩大,越来越多的朋友进入了网游开发这个领域,使得市场中网游开发技术相关的需求量迅猛增长。目前,(网游)网络游戏行业比较紧缺的是具有较深技术功底的“专家型”开发者,这主要包括两个方面:服务器端设计人员以及客户端设计人员。对于网络游戏而言,由于其主要的游戏逻辑计算是在服务器端完成的,数据同步与广播信息的传递也是通过服务器完成的,所以,是否拥有一个有经验的服务器端设计人员已经成为一款网游产品能否成功的关键之一。鉴于此,本文将试图就网游服务器设计的一系列问题展开讨论和总结,笔者将结合自己的开发经验和体会,将其中各方面内容逐一呈现。希望能够对以下三类人员有所帮助:
  有一定网络编程基础、准备进入(网游)网络游戏行业作服务器端设计的人员;
  正在从事网游服务器设计的人员;
  网游项目的技术负责人。
  
  由于网游服务器的设计牵涉到太多内容,比如:网络通信方面、人工智能、数据库设计等等,所以本文将重点从网络通信方面的内容展开论述。谈到网络通信,就不能不涉及如下五个问题:
1、 常见的网游服务通信器架构概述
2、 网游服务器设计的基本原则
3、 网游服务器通信架构设计所需的基本技术
4、 网游服务器通信架构的测试
5、 网游服务器通信架构设计的常见问题

下面我们就从第一个问题说起:

常见的网游服务器通信架构概述
  目前,国内的网游市场中大体存在两种类型的网游游戏: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连接。

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

...全文
4801 157 打赏 收藏 转发到动态 举报
写回复
用AI写文章
157 条回复
切换为时间正序
请发表友善的回复…
发表回复
vclover2009 2013-02-22
  • 打赏
  • 举报
回复
关注游戏设计
wintree 2012-10-12
  • 打赏
  • 举报
回复
大哥,人家是从别地方拷贝过来的。你还当真了?[Quote=引用 85 楼 的回复:]

看你自己10月份的帖子:

不显示删除回复显示所有回复显示星级回复显示得分回复 关于在windows平台下开发网游服务器[问题点数:20分,结帖人:LiWang112358]
LiWang112358

(LiWang112358)

等 级:
结帖率:50.00%

楼主发表于:2010-10-11 10:22:26小弟初学socket,对服务器开发所知甚少,……
[/Quote]
善古 2012-09-19
  • 打赏
  • 举报
回复
严重顶贴!~~学习了..
pthiiu 2011-02-16
  • 打赏
  • 举报
回复
to 97楼: "真本事就是把东西做出来让人服"

严重同意!
yanziszj 2010-11-24
  • 打赏
  • 举报
回复
路过,学习中。。。。
redtop310 2010-11-16
  • 打赏
  • 举报
回复
服务端还一点不懂,hehe
jin20000 2010-11-16
  • 打赏
  • 举报
回复
up............
qiaomax 2010-11-15
  • 打赏
  • 举报
回复
很强大的说。
klpkwhklp 2010-11-15
  • 打赏
  • 举报
回复
静等高人指点
liangyulou 2010-11-15
  • 打赏
  • 举报
回复
講的不錯哦 加油
陈三蒸 2010-11-15
  • 打赏
  • 举报
回复
好帖!~顶起~
冻结 2010-11-15
  • 打赏
  • 举报
回复
马克一下。
smallantcom 2010-11-15
  • 打赏
  • 举报
回复
没接触过 不太清楚
Pro_X 2010-11-15
  • 打赏
  • 举报
回复
[Quote=引用 131 楼 sangdaojun 的回复:]
正在做这方面的项目,比这个要复杂的多,异构分布式服务端,
[/Quote]
吓!你所谓的异构分布式服务端有何复杂之处?
ccltiancai 2010-11-15
  • 打赏
  • 举报
回复
AI可以单拿出来
这个交互并不是很大,相反减轻了逻辑层的压力
jason09527 2010-11-15
  • 打赏
  • 举报
回复
关注。。。。即将进入游戏开发大军。。。
Pro_X 2010-11-15
  • 打赏
  • 举报
回复
正在做这方面的项目,比这个要复杂的多,我们使用的是火星构分布式服务端,
ldicejn 2010-11-15
  • 打赏
  • 举报
回复
没接触过 不太清楚
LiWang112358 2010-11-14
  • 打赏
  • 举报
回复
本人重申一下,这篇文章只是在网上找的,贴出来的目的是为了吸引各位高手赐教,
算是抛砖引玉吧,并无任何说教的意思,希望大家不吝赐教,更不要误会。
angelpanpan 2010-11-14
  • 打赏
  • 举报
回复
拿分。。。。。
加载更多回复(98)

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧