当前位置 : 145z游戏站 | 热血传奇 | 技术教程 | 

传奇服务端架构模块化拆解:DBServer到M2Server五脏六腑全解析

热度:
热血传奇服务端是一套多进程协同的分布式架构,每个进程各司其职,通过TCP长连接与共享数据库交换数据。拆解引擎控制器下的核心模块,能看清从账号验证到战斗结算的完整链路。

一、DBServer(数据库网关)
DBServer是服务端唯一直接读写DBC2000/HeroDB的进程,负责把M2Server的内存请求翻译成数据库操作。核心功能:
•角色管理:创建角色时校验Sid唯一性、名称敏感词过滤、职业与性别合法性;删除角色标记IsDel字段而非物理删除

•数据加载:启动时从Mud2\DB加载StdItems.db(物品库)、Magic.db(技能库)、Monster.DB(怪物库)到内存缓存,减少实时查询开销

•读写代理:M2请求查物品属性、存角色数据,DBServer转发给BDE/HeroDB,返回结果集

•并发控制:用队列串行化写操作,防止多角色同时存盘导致数据覆盖

端口默认5600/5601,配置在DBSrc\DBService.ini,日志在DBSrc\Log。

二、LoginSrv(登录网关)
处理客户端登录器的账号验证与服务器列表分发:
•账号验证:校验用户名密码哈希(早期明文/简单异或,后期加盐),查Account.DB的IsBanned/IsPay状态

•会话分配:验证通过后分配SessionId,返回游戏网关(LoginGate)IP和端口,客户端跳转

•在线统计:维护当前在线账号数,超最大连接数返回"服务器满"

•心跳维持:每30秒检测连接存活,超时踢出释放资源

端口默认5500/5501,配置文件LoginSrv.ini。

三、LoginGate(登录网关/游戏网关)
客户端连接的第一道入口,负责协议解包与连接复用:
•多路复用:单个LoginGate进程可承载数百客户端连接,把数据包转发给后端M2Server

•协议解析:拆TCP流为固定长度数据包(标准传奇协议头含包头标识、长度、命令字、数据体)

•防封包攻击:校验包长度上限、命令字白名单、频率限制(每秒最多N个包)

•负载均衡:多开LoginGate绑定不同端口,配合DNS轮询分散连接压力

端口默认7000(游戏网关),日志在Gate\LoginGate\Log。

四、RunGate/SalGate(游戏数据网关)
RunGate是M2Server与客户端之间的数据中转层,SalGate为备用/第二组网关:
•加解密:传奇协议使用异或加密(早期固定密钥,后期动态密钥握手),Gate负责解密上行包、加密下行包

•连接映射:维护ClientSocket↔UserSocket映射表,M2只认UserSocket标识

•流量整形:限制单IP连接数、单连接发包速率,拦截异常大数据包

•断线处理:客户端断开时通知M2清理对应玩家对象

端口默认7100~7200区间,RunGate.ini配最大用户数和过滤规则。

五、M2Server(游戏世界核心)
M2Server是整个服务端的大脑,承载全部游戏逻辑:
•对象管理:维护在线玩家列表(TUserHuman数组)、怪物实例池、NPC脚本引擎、掉落物实体列表

•地图引擎:加载Mir200\Map\*.map文件,维护每个地图的阻挡表、对象容器(按坐标索引加速视野查询)

•战斗计算:近战命中判定(攻击-防御差值随机)、魔法伤害公式、技能CD与MP消耗、Buff/状态机

•技能系统:解析Magic.db参数,执行技能效果(火墙持续伤害tick、冰咆哮AOE范围判定、召唤物生命周期)

•物品系统:背包增删查改、装备穿戴属性叠加、持久度扣减、物品绑定状态

•任务/NPC:运行QFunction-0.txt触发脚本、商人NPC买卖逻辑、任务条件判定

•定时任务:刷怪定时器(读MonGen.txt)、存档定时器(默认10~15分钟自动存盘)、行会/沙城状态维护

•视野广播:以玩家坐标为中心九宫格(或圆形半径)筛选可见对象,只向该范围内客户端发送状态更新包,大幅节省带宽

配置文件集中在Mir200\Envir\,含AdminList.txt(GM列表)、StartPoint.txt(出生点)、MapInfo.txt(地图属性)、Shop.txt(商城)等。

六、LogServer/LogData(日志服务)
•记录角色登录/登出时间IP、物品流通(捡取/丢弃/交易/掉落)、金币变动、命令执行

•聊天日志按频道分文件存储,便于回溯违规发言

•异常日志(M2报错、Gate异常断开)单独归档,排查问题用

七、共享数据与文件交互
•Mud2\DB:角色数据.db文件(Hum.db/DB/DBIdx)、行会.Guild文件、排行榜快照

•Envir目录:脚本(QManage.txt/QFunction-0.txt)、爆率(MonItems\*.txt)、刷怪(MonGen.txt)、商店(NpcDef/)、地图参数

•Notice目录:M2启动公告、滚动提示、系统广播文本

•Castle目录:沙巴克攻城状态、占领行会、税收记录

八、进程间通信拓扑

客户端→LoginGate(7000)→LoginSrv(5500)→返回网关地址
客户端→RunGate(7100+)→M2Server(内部端口)
M2Server↔DBServer(5600)↔HeroDB(BDE)
M2Server→LogServer(独立端口或文件直写)

M2Server不直接暴露给客户端,所有流量经Gate中转做协议清洗;DBServer不对外监听,只接受本机/内网M2连接。

九、模块故障表现对照
•DBServer未启动/红字→M2报"数据库连接失败",所有角色数据读写卡死,进不了游戏

•LoginSrv异常→登录器报"链接服务器失败"或一直停在验证账号界面

•LoginGate端口被占→客户端点登录无反应或提示"服务器未响应"

•RunGate崩溃→已在线玩家全部掉线,M2显示"用户连接断开"刷屏

•M2Server内存溢出/死循环→全服卡顿、技能放不出、怪物不动,Gate显示大量超时包

•LogServer满盘→写入失败但一般不阻断游戏,仅丢日志

十、引擎控制器(GameCenter)
GEE/GOM/HERO的GameCenter.exe本质是进程管理器,按顺序拉起DBServer→LoginSrv→LoginGate→RunGate→M2Server,监控各自窗口输出,任一进程异常退出可配置自动重启。配置文件GameCenter.ini记录各模块路径、启动参数、自动重启开关。

这套架构把"数据存取、连接接入、逻辑运算"三层彻底分离,Gate层挡协议攻击、DB层挡脏数据、M2层专注玩法,单机千人在线靠加Gate实例和调M2线程参数就能撑住。
[顶部]