服务端热更新
KBEngine Nex 支持在不重启服务端的情况下,对 Python 脚本进行热更新(Hot Reload)。热更只会重新加载被修改过的文件,对正在运行的玩家和业务逻辑影响最小。
触发方式
KBEX 插件触发(推荐)
在 PyCharm 的 KBEX 插件工具栏中点击刷新按钮,即可一键触发热更。插件还支持配置自动检测目录和检测间隔,文件变更时自动执行热更。
脚本手动触发
在任意服务端组件上通过 Python 脚本直接调用:
python
KBEngine.reloadScript()可以在 Telnet 调试工具中连接对应组件后手动执行:
bash
# 连接到 baseapp 的 telnet
telnet localhost 32000
# 执行热更
>>> KBEngine.reloadScript()工作机制
- 只更新修改过的文件:引擎对比文件修改时间,仅重新加载发生变化的
.py文件 - 仅支持 Baseapp 和 Cellapp:热更目前只对
base和cell目录下的脚本生效,Loginapp、DBMgr、Interfaces、Logger 等组件不支持热更 - 默认只更新逻辑层:
reloadScript默认只重新加载脚本逻辑,不会重置实体属性或状态 - 生产模式也支持:产品模式下可以热更,但同样只限于逻辑层更新
- 热更对玩家无感:已连接的客户端不会断开,正在进行的游戏不受影响
使用场景
| 场景 | 是否适合热更 |
|---|---|
| 修复逻辑 BUG | ✅ |
| 调整数值计算逻辑 | ✅ |
| 新增 Entity 方法 | ✅(需同时更新 def 文件并重启对应组件) |
| 新增 Entity 类型 | ❌ 需要重启服务端 |
| 修改 def 配置文件 | ❌ 需要重启服务端 |
修改 kbengine.xml | ❌ 需要重启服务端 |
| 新增第三方依赖库 | ❌ 需要重启服务端 |
注意事项
- def 文件变更需要重启:新增或修改 Entity 的属性、方法定义时,必须重启对应的组件
- 第三方库变更需要重启:新增或升级
pip安装的第三方包,需要重启服务端 - entity_defs 中的类型定义:
types.xml等自定义类型定义的修改需要重启 - 建议先在测试环境验证:热更前建议先在开发环境测试脚本的正确性
