一.摘要
1.网络游戏
MMORPG
整体服务器框架,包括早期,中期,当前的一些主流架构
2.网络游戏网络层,包括网络 协议 , IO 模型,网络框架,消息编码等。
3.网络游戏的 场景 管理, AI , 脚本 的应用等。
4. 开源 的网络服务器引擎
5.参考书籍,博客
二.关键词
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服务器
三. 框架结构
网关服务器 GateServer 心跳 多线程/线程池 开源网络通讯框架/模型
阻塞/非阻塞/同步/异步 Proactor/Reactor/Actor Select/Poll/Epoll/Iocp/Kqueue
游戏开发中的设计模式/数据结构
短连接和长连接 游戏安全 缓存 消息编码协议 脚本语言
Socket Nagle/粘包/截断/TCP_NODELAY AI/场景 分线/分地图 开源MMORPG服务器
三. 框架结构
1. 早期的MMORPG服务器结构
Client<->GameServer<->DB 所有业务,数据集中处理
Client<->GameServer<->DB 所有业务,数据集中处理
优点
:
简单,快速开发
缺点:
1.所有业务放在一起,系统负担大大增加.一个bug可能导致整个服务器崩溃,造成所有玩家掉线甚至丢失等严重后果。
2.开服一刹那,所有玩家全部堆积在同一个新手村.->>>>卡,客户端卡(同屏人数过多渲染/广播风暴) 服务器卡(处理大量同场景消息/广播风暴)
缺点:
1.所有业务放在一起,系统负担大大增加.一个bug可能导致整个服务器崩溃,造成所有玩家掉线甚至丢失等严重后果。
2.开服一刹那,所有玩家全部堆积在同一个新手村.->>>>卡,客户端卡(同屏人数过多渲染/广播风暴) 服务器卡(处理大量同场景消息/广播风暴)
2. 中期-用户分离集群式
GameServe1
Client | DB
GameServer2
玩家不断增多-> 分线 ->程序自动或玩家手动选择进入
缺点 :运营到后期,随着每条线玩家的减少, 互动大大减少。
GameServe1
Client | DB
GameServer2
玩家不断增多-> 分线 ->程序自动或玩家手动选择进入
缺点 :运营到后期,随着每条线玩家的减少, 互动大大减少。
3. 中后期 数据分离集群式
按地图划分服务器,当前主流
新手村问题 :
新手村问题 :
《
天龙八部
》提出了较好的解决方案,建立多个平行的新手村地图,一主多副,开服时尽可能多的同时容纳新用户的涌入,高等级玩家从其它地图回新手村只能到达主新手村。
4. 当前主流的网络游戏架构
注:在GateServer和CenterServer之间是有一条TCP连接的。而GameServer和LogServer之间的连接可以是UDP连接。这是有一个大概的图,很多地方需要细化。
注:在GateServer和CenterServer之间是有一条TCP连接的。而GameServer和LogServer之间的连接可以是UDP连接。这是有一个大概的图,很多地方需要细化。
GateServer:网关服务器,AgentServer、ProxyServer
优点 :
(1)作为网络通信的中转站,负责维护将内网和外网隔离开,使外部无法直接访问内部服务器,保障内网服务器的安全,一定程度上较少外挂的攻击。
(2)网关服务器负责解析数据包、加解密、超时处理和一定逻辑处理,这样可以提前过滤掉错误包和非法数据包。
(3)客户端程序只需建立与网关服务器的连接即可进入游戏,无需与其它游戏服务器同时建立多条连接,节省了客户端和服务器程序的网络资源开销。
(4)在玩家跳服务器时,不需要断开与网关服务器的连接,玩家数据在不同游戏服务器间的切换是内网切换,切换工作瞬问完成,玩家几乎察觉不到,这保证了游戏的流畅性和良好的用户体验。
优点 :
(1)作为网络通信的中转站,负责维护将内网和外网隔离开,使外部无法直接访问内部服务器,保障内网服务器的安全,一定程度上较少外挂的攻击。
(2)网关服务器负责解析数据包、加解密、超时处理和一定逻辑处理,这样可以提前过滤掉错误包和非法数据包。
(3)客户端程序只需建立与网关服务器的连接即可进入游戏,无需与其它游戏服务器同时建立多条连接,节省了客户端和服务器程序的网络资源开销。
(4)在玩家跳服务器时,不需要断开与网关服务器的连接,玩家数据在不同游戏服务器间的切换是内网切换,切换工作瞬问完成,玩家几乎察觉不到,这保证了游戏的流畅性和良好的用户体验。