本地隔离环境、联调与排错 private
本地隔离环境、联调与排错
回答“本地节点如何启动,以及连接、战区、开战、地图和配置问题怎样分层定位”。
11. 本地隔离服务器
重建产物位于:
Source/server/server_chain/.generated-config/runtime
ConfigFile/ConfigLoadNodes.Yaml 当前把节点配置为 127.0.0.1:
| 节点 | 端口 |
|---|---|
| Login | 7000 |
| Lobby | 7100 |
| Battle | 20100 |
| BattleMgr | 20200 |
| Channel / ChannelMgr | 20400 / 20500 |
| Team / TeamMgr | 20600 / 20700 |
| Agent | 20900 |
| Ranking | 21000 |
| IdipFcm | 21100 |
| Matching | 21400 |
| Gateway | 21500 |
| PlayerMgr | 21600 |
ConfigConst.Yaml 还定义 DefaultPortBattleClient=7200。实际战斗连接地址应以服务器下发值和日志为准,不要只凭内部监听端口猜测。
基础依赖:
- ZooKeeper
127.0.0.1:2181 - 隔离 Redis 约定
127.0.0.1:6388 - 隔离 MySQL 约定
127.0.0.1:3307 - 隔离 ConfigShareData 已指向这些实例
- MySQL schema 和 Redis 战区种子数据已初始化
建议顺序:依赖 -> Manager -> Worker -> Lobby/Login -> 辅助节点。在 runtime 目录按节点启动:
dotnet Server.dll -type PlayerMgr -zookeeper 127.0.0.1:2181
dotnet Server.dll -type BattleMgr -zookeeper 127.0.0.1:2181
dotnet Server.dll -type Battle -zookeeper 127.0.0.1:2181
dotnet Server.dll -type TeamMgr -zookeeper 127.0.0.1:2181
dotnet Server.dll -type Team -zookeeper 127.0.0.1:2181
dotnet Server.dll -type ChannelMgr -zookeeper 127.0.0.1:2181
dotnet Server.dll -type Channel -zookeeper 127.0.0.1:2181
dotnet Server.dll -type Ranking -zookeeper 127.0.0.1:2181
dotnet Server.dll -type Matching -zookeeper 127.0.0.1:2181
dotnet Server.dll -type Agent -zookeeper 127.0.0.1:2181
dotnet Server.dll -type Lobby -zookeeper 127.0.0.1:2181
dotnet Server.dll -type Login -zookeeper 127.0.0.1:2181
原始 startnode.bat/startserver.bat 写的是公网 ZooKeeper,不适合隔离环境,不能直接照搬。
最小健康检查:端口监听 -> ZooKeeper 临时节点 -> Worker 在 Manager 注册且 Ability 有效 -> Redis 战区 key 非空 -> Login 返回可见服 -> PlayerMgr 分配 Lobby -> 客户端成功从 Login 切到 Lobby。
12. 联调排错
按层定位:
配置/内容 -> 资源存在 -> 进程启动 -> 服务发现 -> TCP 会话 -> 协议处理
-> 业务状态 -> ECS 实体 -> Unity View/UI
| 现象 | 优先检查 |
|---|---|
| 登录连接失败 | ServerCfg 当前 IP、7000、Login 日志 |
| 战区列表为空 | Redis 战区 key、服状态、列表协议 |
| 登录后马上断 | PlayerMgr、Lobby 注册、返回地址 |
| 创建房间失败 | TeamMgr/Team 注册、玩法配置 |
| 开战失败 | BattleMgr 的 Battle 节点、Ability、地图 |
| 一直卡加载 | SceneInfo、地图 bytes、GUID、LoadSceneSuc |
| 怪不出现 | Spawner ID、SignalFilter、Trigger、权威模式 |
| 怪重复 | 普通与 HostClient/Server Spawn 是否重复启用 |
| 怪不移动 | NavMesh 资产、isOnNavMesh、目标采样、Link |
| 双端位置不同 | 地图版本、SceneGuid、随机种子、同步修正 |
| 改表不生效 | persistentDataPath、生成产物、服务端同步 |
| 协议异常 | proto 版本、字段号、opcode、Session 类型 |
跨进程搜索时保留:playerId、Login/Lobby/Battle SessionId、battlefieldId/serverId、teamId/battleId、mapName/sceneGuid/randomSeed/templateIndices、opcode 和时间戳。openId 必须脱敏。