[转]一种经典的网络游戏服务器架构

转自:html

http://www.cppblog.com/johndragon/archive/2008/04/10/46768.html服务器

出于学习目的转载,若是有不稳当或者侵权的话请及时联系~网络




这个图是一个区的架构图,全部区的架构是同样的。上面虚线框的ServerGroup和旁边方框内的架构同样。图上的全部x N的服务器,都是多台一块儿的。红线,绿线,和蓝线图上也有图示,这里就很少介绍了。关于Agent Server你们也能看出来,其实就是Gate。
这里主要介绍下图上的标记了号码的位置的数据链接的内容和意义。

1-   这是一条WebService的管道,在用户激活该区账号,或者修改账号密码的时候,经过这条通道来插入和更新用户的账号信息。
2-   这也是一条WebService管道,用来获取和控制用户该该组内的角色信息,以及进行付费商城代币之类的更新操做。
3-   这是一条本地的TCP/IP链接,这条链接主要用来进行服务器组在登录服务器的注册,以及登录服务器验证账户后,向用户服务器注册账户登录信息,以及进行对已经登录的账户角色信息进行操做(好比踢掉当前登录的角色),还有服务器组的信息更新(当前在线玩家数量等)。
4-   这也是一条本地TCP/IP链接,这条链接用来对链接到GameServer的客户端进行验证,以及获取角色数据信息,还有传回GameServer上角色的数据信息改变。
5-   这条链接也是一条本地的TCP/IP链接,它用来进行公共信息服务器和数个游戏服务器间的交互,用来交换一些游戏世界级的信息(好比公会信息,跨服组队信息,跨服聊天频道等)。
6-   这里的两条链接,想表达的意思是,UserServer和GameServer的Agent是能够互换使用的,也就是玩家进入组内以后,就不须要再切换Agent。若是不怕乱套,也能够把登录服务器的Agent也算上,这样用户整个过程里就不须要再更换Agent,减小重复链接的次数,也提升了稳定性。(毕竟链接次数少了,也下降了连不上服务器的出现概率)

在这个架构里面,GameServer其实是一个游戏逻辑的综合体,里面能够再去扩展成几个不一样的逻辑服务器,经过PublicServer进行公共数据交换。
UserServer实际上扮演了一个ServerGroup的领头羊的角色,它负责向LoginServer注册和更新服务器组的信息(名字,当前人数),而且对Agent进行调度,对选择了该组的玩家提供一个用户量最少的Agent。同时,它也兼了一个角色管理服务器的功能,发送给客户端当前的角色列表,角色的建立,删除,选择等管理操做,都是在这里进行的。并且,它仍是一个用户信息的验证服务器,GameServer须要经过它来进行客户端的合法性验证,以及获取玩家选择的角色数据信息。


采用这种架构的游戏,一般有如下表现。
1- 用户必须激活一个大区,才能在大区内登录本身的账号。
2- 用户启动客户端的时候,弹出一个登录器,选择大区。
3- 用户启动真正的客户端的时候,一开始就是输入账号密码。
4- 账号验证完成以后,进行区内的服务器选择。
5- 服务器选择完成以后,进入角色管理。同时,角色在不一样的服务器里不能共享。

市面上符合上面几个表现特征的游戏至关的多,并且也不乏旷世巨做。这个架构不是一个新的架构,可是它足够经典和完善,而且逻辑简单而清晰,用来作MMORPG,或者其它网络游戏的服务器架构,是一种不错的选择。架构

 

 

—————————————————————————————————我是分割线—————————————————————————————————————————————框架

以后的内容是咱们本身的学习

 

开发到如今实际上是有一些摸着石头过河的感受的,截至到上周末咱们才有了第二个server,是一个聊天的服务器,另外一个server独揽大局,负责登录、记录玩家、存储场景等等看上去不少其实什么都没作。server

出于开发简化考虑咱们的不少处理以及监测都是在客户端来作的,服务器参与的计算比较少,主要是数据同步转发广播这些功能……htm

在sprint3里面咱们打算作一个新的服务器是计分服务器,换句话说也就是用户服务器了,不涉及到太多逻辑关系,也只是数据上的一些处理。blog

从上面的框架来看咱们的框架简直松散的不堪一击,不过咱们有往这个方向来靠拢的想法,毕竟单一服务器工做量太大的话负载高,并且可能形成延迟卡顿等对玩家而言灾难性的影响,游戏

这样将各个功能分离开确实能够提升效率,使整个逻辑结构更加清晰。

只写过各类课程大实验的我感受架构这个东西实在是神奇……原本架构应该是动工以前就已经敲定好的,咱们就那么凭着经验弄到如今……也算是积累了很多的  教训 吧……

 

从上面转载的内容来看咱们的游戏还有比较严重的问题就是咱们如今是CLIENT直连各个server的,而缺少一个中间层也就是agentserver做为媒介来和后面的server沟通,这也是咱们项目目前作的很差的一点,

改应该是来不及改了,只能在之后的项目(若是还能接触到相似的项目)中多加注意了。

相关文章
相关标签/搜索