游戏架构 游戏架构设计(9)

原文地址:https://blog.csdn.net/erlib/article/details/24302287

一.摘要

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 所有业务,数据集中处理


游戏架构 游戏架构设计(9)_第1张图片
1.jpg
优点:
    简单,快速开发
缺点:
    1.所有业务放在一起,系统负担大大增加.一个bug可能导致整个服务器崩溃,
造成所有玩家掉线甚至丢失等严重后果。

    2.开服一刹那,所有玩家全部堆积在同一个新手村.->>>>卡,
客户端卡(同屏人数过多渲染/广播风暴) 服务器卡(处理大量同场景消息/广播风暴)

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

                GameServe1
Client            |                    DB
                GameServer2

玩家不断增多->分线->程序自动或玩家手动选择进入

缺点:
    运营到后期,随着每条线玩家的减少, 互动大大减少。

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

游戏架构 游戏架构设计(9)_第2张图片
2.jpg

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

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

游戏架构 游戏架构设计(9)_第3张图片
3.jpg

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

优点:
    (1)作为网络通信的中转站,负责维护将内网和外网隔离开,
使外部无法直接访问内部服务器,保障内网服务器的安全,
一定程度上较少外挂的攻击。

    (2)网关服务器负责解析数据包、加解密、超时处理和一定逻辑处理,
这样可以提前过滤掉错误包和非法数据包。

    (3)客户端程序只需建立与网关服务器的连接即可进入游戏,
无需与其它游戏服务器同时建立多条连接,节省了客户端和服务器程序的网络资源开销。

    (4)在玩家跳服务器时,不需要断开与网关服务器的连接,
玩家数据在不同游戏服务器间的切换是内网切换,切换工作瞬问完成,
玩家几乎察觉不到,这保证了游戏的流畅性和良好的用户体验。
缺点:
    1.网关服务器成为高负载情况下的通讯瓶颈问题

    2由于网关的单节点故障导致整组服务器无法对外提供服务的问题
解决:
    1)  多网关技术。顾名思义,“多网关” 就是同时存在多个网关服务器:
比如一组服务器可以配置三台GameGme。当负载较大时,
可以通过增加网关服务器来增加网关的总体通讯流量,
当一台网关服务器宕机时,它只会影响连接到本服务器的客户端,
其它客户端不会受到任何影响。

    2)  DCServer:  数据中心服务器。主要的功能是缓存玩家角色数据,
保证角色数据能快速的读取和保存

    3)  CenterServer:  全局服务器/中心服务器,也叫WorldServer. 
主要负责维持GameServer之间数据的转发和数据广播。
另外一些游戏系统也可能会放到Center上处理,比如好友系统,公会系统。
改进:
    将网关服务器细化为LogingateServer和多个GameGateServer.

5. 按业务分离式集群

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


游戏架构 游戏架构设计(9)_第4张图片
4.jpg
优点:
      1.业务的分离使得每种服务器的程序变的简单,这样可以降低出错的几率。
即使出错,也不至于影响到每一个整个游戏的进行,
而且通过快速启动另一台备用服务器替换出错的服务器。

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

     3.大部分业务都分离了成了单独的服务器,所以可以动态的添加,
从而提高人数上限。
改进:
    甚至可以将登陆服务器细化拆分建角色,选择角色服务器

你可能感兴趣的:(游戏架构 游戏架构设计(9))