OpenMir2 传奇游戏服务器:把六个服务串起来跑通登录链路的最小路径

发布时间:2026/8/27 11:20:35
OpenMir2 传奇游戏服务器:把六个服务串起来跑通登录链路的最小路径 OpenMir2 传奇游戏服务器把六个服务串起来跑通登录链路的最小路径【免费下载链接】OpenMir2Legend of Mir 2 Game server项目地址: https://gitcode.com/gh_mirrors/op/OpenMir2学 MMORPG 服务端架构资料往往是伪代码和框图能真正跑起来的 C# 示例很少。OpenMir2 是一套用 C# 实现的《热血传奇》游戏服务器账号登录、角色选择、实时战斗、数据持久化共六个服务按依赖顺序拉起来客户端就能完整登录进图。 从环境到启动六个服务的部署顺序依赖很少.NET 6 SDK和MySQL 5.7客户端Delphi 编译的 mir 客户端自备。获取代码并初始化数据库三个 SQL 文件顺序不能乱git clone https://gitcode.com/gh_mirrors/op/OpenMir2 cd OpenMir2 mysql -u root -p mir2_db sql/mir2_db.sql mysql -u root -p mir2_account sql/mir2_account.sql mysql -u root -p mir2_data sql/mir2_data.sqldotnet build OpenMir2.sln构建整个解决方案。改数据库连接DBSvr 首次运行会在输出目录生成dbsvr.conf只需要动这一行[DataBase] ConnctionString server127.0.0.1;uidroot;pwd你的密码;databasemir2_db;按依赖顺序分终端启动DBSvr → LoginSvr → GameSvr → GameGate → SelGate → LoginGate。端口分配是固定的客户端连的就是前三个网关服务默认端口职责LoginGate7000客户端登录入口账号注册/校验SelGate7100创建、删除、选择角色GameGate7200进图后的封包转发、反作弊过滤DBSvr6000玩家数据读写5100 为内部网关端口LoginSvr5600账号服务由 DBSvr 的 IDSPort 指向 一次登录请求它依次穿过哪些服务跟着一个玩家的动作走一遍比看模块清单清楚得多。输账号密码客户端连 LoginGate 的 7000 端口校验请求转发给 LoginSvr再由 DBSvr 落库到账号库。角色界面换 SelGate 接管建角色、删角色全部经它转发 DBSvr登录和游戏逻辑完全不参与。进图之后连接切到 GameGate7200 起可开多个7200i走路、攻击、施法的封包经它转给 GameSvrGameSvr 里M2Server库承载角色、地图、怪物的核心逻辑玩家数据变化再经 DBSvr 写回 MySQL。拆成六个服务的取舍主要有两条网关前置会话超时、封包大小限制、加速外挂检测src/GameGate/Conf/GateConfig.cs里一整排IsAttackInterval之类开关都在边缘进程处理游戏逻辑进程不用碰裸 TCP 细节网关挂了不拖累逻辑逻辑重启客户端重连即可。数据层单独抽走服务间全走 TCP 私有协议src/M2Server/Net/TCP/TCPNetChannel.cs不走 HTTP延迟低且 DBSvr 可以独立扩存储后端。️ 动手术指南调优、加地图、换存储连接池在dbsvr.conf的连接串尾部追加Poolingtrue;Min Pool Size10;Max Pool Size100在线人数上去之后数据库往返的开销会明显下降。网关限流与封加速默认参数在src/GameGate/Conf/GateConfig.cs构造函数里MaxClientCount50、MessageWorkThread1运行时由配置文件覆盖。玩家被误判加速调大AttackInterval、MoveInterval或把PunishIntervalRate往 1.0 以上放。日志各服务appsettings.json里的 Serilog 配置默认偏细线上把MinimumLevel从 Debug 调到 Information再按需指向 Seqlocalhost:5341。新增地图和怪物地图模型与可行走点在src/M2Server/Maps/加载逻辑在src/GameSrv/Maps/MapManager.cs刷怪线程在src/GameSrv/Word/Threads/GeneratorProcessor.cs怪物行为类在src/M2Server/Monster/Monsters/加一种怪就是加一个派生类并在数据表登记属性与掉落。挂新模块Modules/ScriptEngine/跑自定义游戏脚本Modules/GameCommand/Commands/下每个文件就是一条 GM 指令照AddGoldCommand.cs的样子复制一份就能加自己的命令。换存储后端dbsvr.conf里[DataBase]段的Storeage项默认MySQL改为 Mongo 后实现对应src/Storeages/DBSvr.Storage.MongoDB/里的读写MySQL 实现参照src/Storeages/DBSvr.Storage.MySQL/PlayDataStorage.Save.cs。 翻车记录四个高频卡点现象客户端登录界面卡住或提示连接超时。根因LoginGate 没启动或防火墙没放行 7000 端口。解法netstat -ano确认 7000/7100/7200 都在监听放行对应端口。现象DBSvr 启动后反复报数据库连接失败。根因dbsvr.conf的ConnctionString还是默认空密码或sql/下脚本没导入。解法重跑三个 SQL 文件改对 uid/pwd 后重启 DBSvr。现象能登录但角色列表空白、建角色报错。根因SelGate 依赖 DBSvrDBSvr 又要先连上 LoginSvr5600启动顺序乱了。解法严格按 DBSvr → LoginSvr → GameSvr → 三个网关的顺序拉起。现象角色移动、攻击一卡一卡甚至被提示关闭加速外挂。根因GameGate 的动作间隔默认值偏严移动 570ms、攻击 900ms客户端帧率低时触发惩罚。解法把对应间隔调大或放宽PunishBaseInterval再观察是否复现。收尾六个服务读下来能带走三件事网关与游戏逻辑怎么分离、服务间 TCP 协议怎么设计、数据层怎么可替换。下一步建议顺着src/GameSrv/Word/的 tick 循环和src/M2Server/Net/的封包结构往下拆。【免费下载链接】OpenMir2Legend of Mir 2 Game server项目地址: https://gitcode.com/gh_mirrors/op/OpenMir2创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考