工程参考/配置文件/Server/ServerInfo.ini
这份文件把一组服务端程序的编号和通信地址关联起来。玩家登录地址、进入场景的游戏地址、服务内部的 World/Billing 地址分属不同用途,不能把整份文件里的 IP 全部替换。
文件位置与生效
| 项目 | 说明 |
|---|---|
| 服务器运行路径 | Server/Config/ServerInfo.ini,以程序实际工作目录为准;源码 resources 中的文件是样本。
|
| 主要使用者 | 主要用于 Server、Login、World、Billing;公共初始化也会读取 |
| 生效方法 | 这六份文件通过公共初始化流程读取,主要使用者在本页标明;不需要把它们复制到玩家客户端。重新加载配置的入口没有重读本页字段。修改后按正常流程保存并停服,再重启使用这份配置的程序;服务共用同一 Config 目录时,相关进程须使用一致配置。 |
| 样本格式 | UTF-8,换行为 CRLF;保留原编码、节名、键名与换行,不自动改成 UTF-8。
|
先找到 [System],再按 ServerNumber 查找连续的 [Server0]、[Server1] 等组。组名中的序号是文件顺序,组内 ServerID 才是服务编号;[World]、[Billing]、[Mother] 和 [Proxy] 是另外的组。
文件格式
使用 [节名] 与 Key=Value。节名和键名按源码拼写保留;本读取器按大小写精确匹配,节标题从行首开始。推荐沿用原有 CRLF 换行,在单独一行用分号写注释,不向值里插入制表符,也不依赖引号转义。详细读取边界见修改约定。
字段详解
表中“必填”表示读取代码要求存在,并不表示程序已校验业务取值合法。序号字段中的 [n] 表示按数量展开,不能原样写成带 [n] 的键。
[System]
| 项目与类型 | 含义与修改要点 | 缺项或特殊值 |
|---|---|---|
Desc[n]说明文字 |
样本中的 Desc0 到 Desc3。当前核对的读取代码没有读取这些键;只作人工说明,不能通过修改说明文字改变程序行为。 | 样本说明项;未发现读取。 |
CurrentServerID整数,服务编号 |
游戏程序用此编号选择对应 [Servern],不是组名中的 n。必须能在 ServerID 中找到;Login 使用 LoginInfo.ini 的 LoginID 选择自己的记录。 | 原配置必填;读取失败会进入断言/错误路径,不把缺项视为采用默认值。 |
ServerNumber正整数,条目数量 |
读取 n=0 到 ServerNumber-1 的 [Servern],必须连续存在。它统计服务记录,不是在线人数、场景数量或最高 ServerID。 | 原配置必填;读取失败会进入断言/错误路径,不把缺项视为采用默认值。 |
EnableEffAudit整数,0/非0 |
非 0 开启性能统计相关逻辑,0 保持初始化关闭状态。它不是玩家权限或防作弊总开关。 | 原配置必填;读取失败会进入断言/错误路径,不把缺项视为采用默认值。 |
EffAuditSaveResultInterval正整数,分钟 |
性能统计采样结果保存周期;不是角色数据落库周期。使用处乘以 60000 与毫秒时钟比较。配置读取仅接受正值;统计初始化还检查两个周期均为正且报告周期除以保存周期的整数商不超过 10,否则两个周期都采用 60 分钟。 | 原配置必填;读取失败会进入断言/错误路径,不把缺项视为采用默认值。 |
EffAuditReportInterval正整数,分钟 |
性能统计报告周期,使用处乘以 60000。与采样结果保存周期配套;统计初始化条件不满足时,两项都采用 60 分钟,不表示关闭统计。 | 原配置必填;读取失败会进入断言/错误路径,不把缺项视为采用默认值。 |
EnableEffAuditSceneID_1ST整数,场景 ID |
指定参与场景性能统计的场景 ID,与 SceneInfo.ini 的场景标识核对。非负数赋值,负数保留无效 ID;还需启用 EnableEffAudit。 | 原配置必填;读取失败会进入断言/错误路径,不把缺项视为采用默认值。 |
EnableEffAuditSceneID_2ND整数,场景 ID |
指定参与场景性能统计的场景 ID,与 SceneInfo.ini 的场景标识核对。非负数赋值,负数保留无效 ID;还需启用 EnableEffAudit。 | 原配置必填;读取失败会进入断言/错误路径,不把缺项视为采用默认值。 |
EnableEffAuditSceneID_3RD整数,场景 ID |
指定参与场景性能统计的场景 ID,与 SceneInfo.ini 的场景标识核对。非负数赋值,负数保留无效 ID;还需启用 EnableEffAudit。 | 原配置必填;读取失败会进入断言/错误路径,不把缺项视为采用默认值。 |
[Server[n]]
| 项目与类型 | 含义与修改要点 | 缺项或特殊值 |
|---|---|---|
ServerID整数,服务编号 |
服务记录唯一编号。当前索引容量为 256,正常配置使用 0 到 255 且不得重复;不是场景 ID,也不要求等于 [Servern] 的 n。 | 原配置必填;读取失败会进入断言/错误路径,不把缺项视为采用默认值。 |
MachineID整数,机器编号 |
引用 MachineInfo.ini 中的 MachineID,供程序识别哪些服务属于同一机器;不能用 IP 地址或网卡编号替代。 | 原配置必填;读取失败会进入断言/错误路径,不把缺项视为采用默认值。 |
IP0IPv4 字符串 |
提供给客户端的默认服务地址:游戏记录填写游戏入口地址,登录记录填写登录入口地址。路由器转发场景可填公网地址;本机监听不要求该 IP 在本机网卡上。 | 原配置必填;读取失败会进入断言/错误路径,不把缺项视为采用默认值。 |
Port0整数,TCP 端口 |
对应程序的对外监听端口及默认返回端口。示例游戏 14401、登录 14400;具体数值须与现有配置、防火墙和转发一致。 | 原配置必填;读取失败会进入断言/错误路径,不把缺项视为采用默认值。 |
IP1IPv4 字符串 |
服务之间使用的内部地址。它不是给局域网玩家准备的第二套 IP0;同机部署保留现有内部地址。 | 原配置必填;读取失败会进入断言/错误路径,不把缺项视为采用默认值。 |
Port1整数,内部端口 |
与 IP1 配对的内部通信端口。不能与玩家入口端口混用,改变前核对连接此服务的其他程序。 | 原配置必填;读取失败会进入断言/错误路径,不把缺项视为采用默认值。 |
IP(CNC)IPv4 字符串 |
选中 CNC 线路时可能返回的地址,与同名 Port 配对。单一入口部署四个 IP 项填同一个可达地址;0.0.0.0 不表示禁用线路。 | IP/Port 都读取成功才启用该对;任一缺失则不启用并记录日志。 |
Port(CNC)整数,TCP 端口 |
与 IP(CNC) 配对的客户端端口。游戏记录填游戏端口,登录记录填登录端口。若不同于 Port0,需要对应的端口映射。 | 与线路 IP 成对;读取成功不等于地址和端口有效。 |
IP(CTC)IPv4 字符串 |
选中 CTC 线路时可能返回的地址,与同名 Port 配对。单一入口部署四个 IP 项填同一个可达地址;0.0.0.0 不表示禁用线路。 | IP/Port 都读取成功才启用该对;任一缺失则不启用并记录日志。 |
Port(CTC)整数,TCP 端口 |
与 IP(CTC) 配对的客户端端口。游戏记录填游戏端口,登录记录填登录端口。若不同于 Port0,需要对应的端口映射。 | 与线路 IP 成对;读取成功不等于地址和端口有效。 |
IP(EDU)IPv4 字符串 |
选中 EDU 线路时可能返回的地址,与同名 Port 配对。单一入口部署四个 IP 项填同一个可达地址;0.0.0.0 不表示禁用线路。 | IP/Port 都读取成功才启用该对;任一缺失则不启用并记录日志。 |
Port(EDU)整数,TCP 端口 |
与 IP(EDU) 配对的客户端端口。游戏记录填游戏端口,登录记录填登录端口。若不同于 Port0,需要对应的端口映射。 | 与线路 IP 成对;读取成功不等于地址和端口有效。 |
Type整数,程序类型 |
枚举:0 游戏、1 登录、2 共享存储、3 World、4 Billing。枚举存在不代表把任意组改成该值即可启动对应服务;保留已有部署结构。 | 原配置必填;读取失败会进入断言/错误路径,不把缺项视为采用默认值。 |
HumanSMKey整数,共享内存键 |
角色数据共享内存标识,必须与 ShareMemInfo.ini 中对应 Key[n] 相同,Type[n]=1。键不是容量或端口;已运行区服不能随意改成另一值。 | 原配置必填;读取失败会进入断言/错误路径,不把缺项视为采用默认值。 |
PlayShopSMKey整数,共享内存键 |
玩家商店共享内存标识,必须与 ShareMemInfo.ini 中对应 Key[n] 相同,Type[n]=4。键不是容量或端口;已运行区服不能随意改成另一值。 | 原配置必填;读取失败会进入断言/错误路径,不把缺项视为采用默认值。 |
ItemSerialKey整数,共享内存键 |
物品序列号共享内存标识,必须与 ShareMemInfo.ini 中对应 Key[n] 相同,Type[n]=7。键不是容量或端口;已运行区服不能随意改成另一值。 | 原配置必填;读取失败会进入断言/错误路径,不把缺项视为采用默认值。 |
CommisionShopKey整数,共享内存键 |
寄售商店共享内存标识,必须与 ShareMemInfo.ini 中对应 Key[n] 相同,Type[n]=6。键不是容量或端口;已运行区服不能随意改成另一值。 | 原配置必填;读取失败会进入断言/错误路径,不把缺项视为采用默认值。 |
EnableShareMem整数,0/非0 |
控制游戏服务使用共享内存的分支。须与实际存储流程及 ShareMemory 配套,不能把关闭共享内存当作数据保存问题的修复方法。 | 原配置必填;读取失败会进入断言/错误路径,不把缺项视为采用默认值。 |
[World]
| 项目与类型 | 含义与修改要点 | 缺项或特殊值 |
|---|---|---|
IPIPv4 字符串 |
其他服务连接 World 的内部地址,同机部署通常保留原有本机地址。它不是客户端登录 IP。 | 原配置必填;读取失败会进入断言/错误路径,不把缺项视为采用默认值。 |
Port整数,TCP 端口 |
World 的内部监听/连接端口,相关进程须一致。 | 原配置必填;读取失败会进入断言/错误路径,不把缺项视为采用默认值。 |
[Mother]
| 项目与类型 | 含义与修改要点 | 缺项或特殊值 |
|---|---|---|
IPIPv4 字符串 |
World 的 MotherClient 连接目标,属于独立上级服务连接;不作为玩家入口。未部署相关服务时保留现有配置,业务效果需要实测。 | 原配置必填;读取失败会进入断言/错误路径,不把缺项视为采用默认值。 |
Port整数,TCP 端口 |
与 Mother.IP 配对。不要为解决玩家登录问题改动它。 | 原配置必填;读取失败会进入断言/错误路径,不把缺项视为采用默认值。 |
[Billing]
| 项目与类型 | 含义与修改要点 | 缺项或特殊值 |
|---|---|---|
Number正整数,地址数量 |
Login 等读取 n=0 到 Number-1 的 Billing 地址;Billing 程序自己的监听端口读取本组 Port0。超出 Number 的备用条目不参与此循环。 | 原配置必填;读取失败会进入断言/错误路径,不把缺项视为采用默认值。 |
IP[n]IPv4 字符串 |
计费/账号服务的内部地址,序号由 Number 控制;不是玩家 IP。单 Billing 部署保留正确的 IP0。 | 启用的序号范围内必填。 |
Port[n]整数,TCP 端口 |
与同序号 IP 配对。Billing 程序监听 Port0;修改监听端口时连接方也要使用相同值。 | 启用的序号范围内必填。 |
[Proxy]
| 项目与类型 | 含义与修改要点 | 缺项或特殊值 |
|---|---|---|
Proxy0ForCncUserIPv4 字符串 |
用于识别 Cnc 线路代理的内部来源地址。它与 [Servern] 中下发给客户端的 IP(CNC) 不同;家庭路由器不是这里所指的游戏代理。 | 可选;缺失记录警告。不要为了消除警告随意填写。 |
Proxy1ForCncUserIPv4 字符串 |
用于识别 Cnc 线路代理的内部来源地址。它与 [Servern] 中下发给客户端的 IP(CNC) 不同;家庭路由器不是这里所指的游戏代理。 | 可选;缺失记录警告。不要为了消除警告随意填写。 |
Proxy0ForCtcUserIPv4 字符串 |
用于识别 Ctc 线路代理的内部来源地址。它与 [Servern] 中下发给客户端的 IP(CTC) 不同;家庭路由器不是这里所指的游戏代理。 | 可选;缺失记录警告。不要为了消除警告随意填写。 |
Proxy1ForCtcUserIPv4 字符串 |
用于识别 Ctc 线路代理的内部来源地址。它与 [Servern] 中下发给客户端的 IP(CTC) 不同;家庭路由器不是这里所指的游戏代理。 | 可选;缺失记录警告。不要为了消除警告随意填写。 |
Proxy0ForEduUserIPv4 字符串 |
用于识别 Edu 线路代理的内部来源地址。它与 [Servern] 中下发给客户端的 IP(EDU) 不同;家庭路由器不是这里所指的游戏代理。 | 可选;缺失记录警告。不要为了消除警告随意填写。 |
Proxy1ForEduUserIPv4 字符串 |
用于识别 Edu 线路代理的内部来源地址。它与 [Servern] 中下发给客户端的 IP(EDU) 不同;家庭路由器不是这里所指的游戏代理。 | 可选;缺失记录警告。不要为了消除警告随意填写。 |
常用修改实例
以下均是局部教学片段,修改原文件对应位置,不能覆盖整份文件。IP、编号、周期均为教学值。
把已有游戏记录的默认入口及三条线路改为局域网地址
修改前的教学片段:
[Server0] IP0=127.0.0.1 Port0=14401
修改后:
[Server0] IP0=192.168.50.10 Port0=14401 IP(CNC)=192.168.50.10 Port(CNC)=14401 IP(CTC)=192.168.50.10 Port(CTC)=14401 IP(EDU)=192.168.50.10 Port(EDU)=14401
先确认 [Server0] 是 Type=0 的游戏组,再修改原组内这些项目;保留 ServerID、MachineID、IP1、共享内存键等其他项。登录组须另按登录端口修改,玩家客户端还须改 LoginServer.txt,完整步骤见外网设置教程。
验证与排查
先检查各编号及共享内存键关联,再检查程序监听端口;客户端依次测试登录、选择角色、进入场景。能登录不等于游戏入口也正确。
样本重复出现 EnableEffAuditSceneID_3RD。当前 INI 查找按顺序返回首个匹配键,后面的同名键不能当作覆盖前值。实际文件若有重复项,先比较两处值并保留备份,再整理为一项。
关联与依据
LoginInfo.ini · WorldInfo.ini · BillingInfo.ini · ShareMemInfo.ini · MachineInfo.ini
Common/ServerBase/Config.cpp:加载位置、字段读取与重新加载范围Common/ServerBase/Config.h:初始化值与配置结构Common/ServerBase/Ini.cpp:INI 实际解析规则Common/ServerBase/Ini.h:读取失败与返回方式Common/ServerBase/FileDef.h:运行时相对路径Common/GameDefine2.h:程序类型与共享内存类型枚举Server/Server_2026_Project.props:当前 Windows 工程的条件编译定义Server/Server/GameServer/Server/Main/ServerManager.cpp:字段使用、连接或数据处理分支Server/Server/GameServer/Server/Main/EfficiencyAudit.cpp:字段使用、连接或数据处理分支Server/Server/GameServer/Server/Main/DaemonThread.cpp:字段使用、连接或数据处理分支Server/Server/GameServer/Server/Scene/Scene_Core.cpp:字段使用、连接或数据处理分支Server/Server/LoginServer/Login/Player/LoginPlayerManager.cpp:字段使用、连接或数据处理分支Server/Server/GameServer/Server/Player/IncomingPlayerManager.cpp:字段使用、连接或数据处理分支Server/Server/LoginServer/Login/Packets/CLConnectHandler.cpp:字段使用、连接或数据处理分支Server/Server/LoginServer/Login/Packets/WLRetCharLoginHandler.cpp:字段使用、连接或数据处理分支Server/Server/LoginServer/Login/Player/LoginPlayer.cpp:字段使用、连接或数据处理分支Server/Server/WorldServer/World/Main/MotherClient.cpp:字段使用、连接或数据处理分支Common/ServerBase/TimeManager.cpp:计时单位Common/Net/ServerSocket.cpp:监听地址与端口
核对范围为当前维护源码与配置样本;未启动游戏、服务端或数据库。配置解析测试与游戏业务测试分开记录;文中运行效果仍需要实测。