之前一段时间公司派我去其他地方出差, 由于网络不方便没有更新博客.
这篇阐述一下服务器端的总体架构.
总体架构:
一个游戏世界(game)由以下进程组成 Center*1 + DB*1 + World*1 + Bridge*1 + Map*n + Gate*n 组成.
一个大区由n个游戏世界组成(game), 每个区有一个 Login.
game 内部:
Center 负责接收其他进程的连接, 并为之分配id, 并指导它们相互连接.
DB负责game内部的游戏数据存储策略,需要的数据向其申请读取, 存储等.
Map是地图服务器, 一个游戏有多个用于增加负载. 每个Map管理一张地图或一张地图的一部分区域.
World负责game内部逻辑总管理, 管理所有Map, 以及公共的资源, 比如 队伍, 工会等.
Gate负责接受Client的连接, 并为之提供稳定的数据传输.
Bridge 桥接服务器, 用于管理地图中的跨进程问题. 最常见的是: 一张地图由2个以上的Map管理, 地图上的玩家,怪物数据之间做无缝隙处理.
大区内:
一个大区有一个Login, 每个game 中的Center 连接这个Login, 并把此game中的Gate信息传送到 Login.
游戏连接情况:
game 内其他进程都连接 Center, Center给他们分配id, 并指导其相互连接. 连接情况如下:
Center->Login,
DB->Center,
World->Center, World->DB,
Bridge->Center,
Map->Center, Map->World, Map->DB,Map->Bridge
Gate->Center, Gate->DB,Gate->Map(每一个Gate都需要连接所有的Map),
游戏登录:
Client->Login , Client先选择要连接的大区, 再连接到此大区的Login, 在Login上选择要连接的game, Login根据此区内的
Gate的负载情况给出Client需要连接的Gate信息.
Clinet->Gate, 在Gate实现登录(Gate访问DB数据), 并根据地图数据进入Map(在Map上生成实例).逻辑实际是在Map上运行.
服务器进程内架构:
一个进程有多个Block, 继承自LogicBase, 分别实现不同的功能模块, 分为: 连接模块, 管理模块, 逻辑模块.连接模块实现连接管理,
一个进程有一个Server, 继承自 ServerBase. Server 管理多个Block.
下一篇我将阐述 进程内 的架构以及功能.