工程参考/配置文件/Server/ShareMemInfo.ini
ShareMemory 负责共享数据的存储处理。本文件中的 Key 与 ServerInfo.ini、WorldInfo.ini 的共享内存键相互对应;改错键可能让进程连接到不同的数据区域,不能把它们当作随意编号。
文件位置与生效
| 项目 | 说明 |
|---|---|
| 服务器运行路径 | Server/Config/ShareMemInfo.ini,以程序实际工作目录为准;源码 resources 中的文件是样本。
|
| 主要使用者 | 主要使用者为 ShareMemory;Server 和 World 使用其中关联的数据键 |
| 生效方法 | 这六份文件通过公共初始化流程读取,主要使用者在本页标明;不需要把它们复制到玩家客户端。重新加载配置的入口没有重读本页字段。修改后按正常流程保存并停服,再重启使用这份配置的程序;服务共用同一 Config 目录时,相关进程须使用一致配置。 |
| 样本格式 | UTF-8,换行为 CRLF;保留原编码、节名、键名与换行,不自动改成 UTF-8。
|
[System] 配数据库和周期,[ShareMem] 从 Key0/Type0 开始逐对列出共享数据。KeyCount 是条目数量,不是键的最大数值。
文件格式
使用 [节名] 与 Key=Value。节名和键名按源码拼写保留;本读取器按大小写精确匹配,节标题从行首开始。推荐沿用原有 CRLF 换行,在单独一行用分号写注释,不向值里插入制表符,也不依赖引号转义。详细读取边界见修改约定。
字段详解
表中“必填”表示读取代码要求存在,并不表示程序已校验业务取值合法。序号字段中的 [n] 表示按数量展开,不能原样写成带 [n] 的键。
[System]
| 项目与类型 | 含义与修改要点 | 缺项或特殊值 |
|---|---|---|
DBIP字符串,地址 |
保存配置中的数据库主机地址。当前核对的 ODBC 连接代码没有把它传入 SQLConnect;实际主机由 DBName 指定的数据源配置决定。修改它不能代替修改 ODBC 数据源。 | 原配置必填;读取失败会进入断言/错误路径,不把缺项视为采用默认值。 |
DBPort整数,端口 |
保存配置中的数据库端口。当前连接调用不使用此值建立连接;实际端口在对应 ODBC 数据源中设置。不能填游戏或登录端口。 | 原配置必填;读取失败会进入断言/错误路径,不把缺项视为采用默认值。 |
DBName字符串,ODBC 数据源名 |
作为 SQLConnect 的数据源名称传入。它要对应服务器电脑上已配置的 ODBC DSN;不一定等于数据库中的库名。数据源内部还需选对实际数据库。 | 原配置必填;读取失败会进入断言/错误路径,不把缺项视为采用默认值。 |
DBUser字符串 |
连接数据库使用的用户,不是玩家账号或 Wiki 账号。应具有目标数据库所需权限。 | 原配置必填;读取失败会进入断言/错误路径,不把缺项视为采用默认值。 |
DBPassword字符串 |
DBUser 对应的数据库凭据。填写自己的值,不照抄示例;格式还受本程序的 CryptPwd 处理影响。 | 原配置必填;读取失败会进入断言/错误路径,不把缺项视为采用默认值。 |
CryptPwd整数,建议使用明确的 0 或 1 |
大于 0 时用 Seraph::string2pwd 解码配置中的数据库密码;小于等于 0 时直接使用字符串。它不是玩家登录密码的加密开关,也不能把任意密文填写进来。 | 原配置必填;读取失败会进入断言/错误路径,不把缺项视为采用默认值。 |
SMUInterval正整数,毫秒 |
多类共享数据检查/保存逻辑使用的周期,10000 为 10 秒。并非所有类型统一采用它:全局数据分支使用固定 30 秒。降低周期会增加处理负担,实际保存结果需要实测。 | 原配置必填;读取失败会进入断言/错误路径,不把缺项视为采用默认值。 |
DATAInterval正整数,毫秒 |
用于角色数据写入任务的后续保存时间安排。它不是数据库超时,也不保证所有类型每隔这个时间写一次。 | 原配置必填;读取失败会进入断言/错误路径,不把缺项视为采用默认值。 |
[ShareMem]
| 项目与类型 | 含义与修改要点 | 缺项或特殊值 |
|---|---|---|
KeyCount正整数,条目数量 |
循环读取 n=0 到 KeyCount-1 的 Key[n] 与 Type[n],两项都必须存在。样本列出 11 对,但数量须按实际部署核对。 | 原配置必填;读取失败会进入断言/错误路径,不把缺项视为采用默认值。 |
Key[n]整数,共享内存键 |
对应 ServerInfo.ini 或 WorldInfo.ini 中同一数据用途的键,所有使用者保持一致。不是端口、容量、表行号或玩家 GUID。 | 启用序号内必填。 |
Type[n]整数,数据类型 |
1 角色;2 帮会;3 邮件;4 玩家商店;5 全局数据;6 寄售商店;7 物品序列号;8 珍兽创建;9 城市;10 帮会联盟;11 交友广告。-1 是无效标识,不用来禁用有效条目。 | 启用序号内必填;与同序号 Key 配对。 |
常用修改实例
以下均是局部教学片段,修改原文件对应位置,不能覆盖整份文件。IP、编号、周期均为教学值。
在测试环境调整共享数据处理周期
修改前的教学片段:
[System] SMUInterval=10000 DATAInterval=60000
修改后:
[System] SMUInterval=20000 DATAInterval=60000
教学示例把采用 SMUInterval 的周期从 10 秒改为 20 秒,DATAInterval 继续保持 60 秒。先正常完成保存和停服,备份原文件,再修改这两行中的第一行;保留数据库、KeyCount 及所有键。这会降低部分处理频率,但不代表统一改变全部数据的落库间隔。
验证与排查
逐对检查键与类型,再检查数据库连接和保存日志。在独立测试环境修改角色数据、正常停服后重启检查持久化结果;本页没有实际执行该测试。
不要强制结束正在保存的 ShareMemory;不要为了测试本页而清空共享内存或修改线上数据键。完成正常保存后再停服。数据库也使用 ODBC 数据源,DBIP/DBPort 不能代替 DSN 内的连接设置。
关联与依据
ServerInfo.ini · WorldInfo.ini · LoginInfo.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/ShareMemory/ShareMemory/ShareData/SMULogicManager.cpp:字段使用、连接或数据处理分支Server/Server/ShareMemory/ShareMemory/DB/ShareDBManager.cpp:字段使用、连接或数据处理分支Server/Server/ShareMemory/ShareMemory/Main/ShareMemory.cpp:字段使用、连接或数据处理分支Common/DBSystem/DataBase/ODBCInterface.cpp:ODBC DSN 连接调用Common/ServerBase/TimeManager.cpp:计时单位
核对范围为当前维护源码与配置样本;未启动游戏、服务端或数据库。配置解析测试与游戏业务测试分开记录;文中运行效果仍需要实测。