一.摘要

1.网络游戏 MMORPG 整体服务器框架,包括早期,中期,当前的一些主流架构
2.网络游戏网络层,包括网络 协议 , IO 模型,网络框架,消息编码等。
3.网络游戏的 场景 管理, AI , 脚本 的应用等。
4. 开源 的网络服务器引擎
5.参考书籍,博客


二.关键词



网络协议 网络IO 消息 广播 同步 CS TCP/UDP IP 集群 负载均衡 分布式 
网关服务器 GateServer 心跳 多线程/线程池 开源网络通讯框架/模型
阻塞/非阻塞/同步/异步    Proactor/Reactor/Actor Select/Poll/Epoll/Iocp/Kqueue 
游戏开发中的设计模式/数据结构
短连接和长连接 游戏安全 缓存 消息编码协议 脚本语言 
Socket Nagle/粘包/截断/TCP_NODELAY AI/场景 分线/分地图 开源MMORPG服务器

三.正文 框架结构

1.    早期的MMORPG服务器结构

Client<->GameServer<->DB    所有业务,数据集中处理



游戏架构师学什么专业 网络游戏架构师_云计算

优点 :简单,快速开发
缺点:
     1.所有业务放在一起,系统负担大大增加.一个bug可能导致整个服务器崩溃,造成所有玩家掉线甚至丢失等严重后果。
     2.开服一刹那,所有玩家全部堆积在同一个新手村.->>>>卡,客户端卡(同屏人数过多渲染/广播风暴) 服务器卡(处理大量同场景消息/广播风暴)



2.    中期-用户分离集群式

                GameServe1
Client            |                    DB
                GameServer2

玩家不断增多-> 分线 ->程序自动或玩家手动选择进入
缺点 :运营到后期,随着每条线玩家的减少, 互动大大减少。

3.    中后期 数据分离集群式



游戏架构师学什么专业 网络游戏架构师_技术架构_02



按地图划分服务器,当前主流
     新手村问题 :《 天龙八部 》提出了较好的解决方案,建立多个平行的新手村地图,一主多副,开服时尽可能多的同时容纳新用户的涌入,高等级玩家从其它地图回新手村只能到达主新手村。

4.    当前主流的网络游戏架构



游戏架构师学什么专业 网络游戏架构师_云计算_03



    

    注:在GateServer和CenterServer之间是有一条TCP连接的。而GameServer和LogServer之间的连接可以是UDP连接。这是有一个大概的图,很多地方需要细化。

GateServer:网关服务器,AgentServer、ProxyServer

  优点 : 
    (1)作为网络通信的中转站,负责维护将内网和外网隔离开,使外部无法直接访问内部服务器,保障内网服务器的安全,一定程度上较少外挂的攻击。
    (2)网关服务器负责解析数据包、加解密、超时处理和一定逻辑处理,这样可以提前过滤掉错误包和非法数据包。
    (3)客户端程序只需建立与网关服务器的连接即可进入游戏,无需与其它游戏服务器同时建立多条连接,节省了客户端和服务器程序的网络资源开销。
    (4)在玩家跳服务器时,不需要断开与网关服务器的连接,玩家数据在不同游戏服务器间的切换是内网切换,切换工作瞬问完成,玩家几乎察觉不到,这保证了游戏的流畅性和良好的用户体验。

    缺点 : 
1.网关服务器成为高负载情况下的通讯瓶颈问题
2由于网关的单节点故障导致整组服务器无法对外提供服务的问题

    解决: 多网关 技术。顾名思义,“多网关” 就是同时存在多个网关服务器,比如一组服务器可以配置三台GameGme。当负载较大时,可以通过增加网关服务器来增加网关的总体通讯流量,当一台网关服务器宕机时,它只会影响连接到本服务器的客户端,其它客户端不会受到任何影响。

DCServer :数据中心服务器。主要的功能是缓存玩家角色数据,保证角色数据能快速的读取和保存
CenterServer :全局服务器/中心服务器,也叫 WorldServer . 主要负责维持GameServer之间数据的转发和数据广播。另外一些游戏系统也可能会放到Center上处理,比如好友系统,公会系统。

     改进 :将网关服务器细化为LogingateServer和多个GameGateServer.

5.    按 业务分离式 集群
由于网络游戏存在很多的业务,如聊天,战斗,行走,NPC等,可以将某些业务分到单独的服务器上。这样每个服务器的程序则会精简很多。而且一些大流量业务的分离,可以有效的提高游戏服务器人数上限。

 


游戏架构师学什么专业 网络游戏架构师_服务器_04


优点:

      1.业务的分离使得每种服务器的程序变的简单,这样可以降低出错的几率。即使出错,也不至于影响到每一个整个游戏的进行,而且通过快速启动另一台备用服务器替换出错的服务器。

     2.业务的分离使得流量得到了分散,进而相应速度回得到提升 。

     3.大部分业务都分离了成了单独的服务器,所以可以动态的添加,从而提高人数上限。


改进 :甚至可以将登陆服务器细化拆分建角色,选择角色服务器