Skip to content

服务端热更新

KBEngine Nex 支持在不重启服务端的情况下,对 Python 脚本进行热更新(Hot Reload)。热更只会重新加载被修改过的文件,对正在运行的玩家和业务逻辑影响最小。

触发方式

KBEX 插件触发(推荐)

在 PyCharm 的 KBEX 插件工具栏中点击刷新按钮,即可一键触发热更。插件还支持配置自动检测目录和检测间隔,文件变更时自动执行热更。

脚本手动触发

在任意服务端组件上通过 Python 脚本直接调用:

python
KBEngine.reloadScript()

可以在 Telnet 调试工具中连接对应组件后手动执行:

bash
# 连接到 baseapp 的 telnet
telnet localhost 32000

# 执行热更
>>> KBEngine.reloadScript()

工作机制

  • 只更新修改过的文件:引擎对比文件修改时间,仅重新加载发生变化的 .py 文件
  • 仅支持 Baseapp 和 Cellapp:热更目前只对 basecell 目录下的脚本生效,Loginapp、DBMgr、Interfaces、Logger 等组件不支持热更
  • 默认只更新逻辑层reloadScript 默认只重新加载脚本逻辑,不会重置实体属性或状态
  • 生产模式也支持:产品模式下可以热更,但同样只限于逻辑层更新
  • 热更对玩家无感:已连接的客户端不会断开,正在进行的游戏不受影响

使用场景

场景是否适合热更
修复逻辑 BUG
调整数值计算逻辑
新增 Entity 方法✅(需同时更新 def 文件并重启对应组件)
新增 Entity 类型❌ 需要重启服务端
修改 def 配置文件❌ 需要重启服务端
修改 kbengine.xml❌ 需要重启服务端
新增第三方依赖库❌ 需要重启服务端

注意事项

  1. def 文件变更需要重启:新增或修改 Entity 的属性、方法定义时,必须重启对应的组件
  2. 第三方库变更需要重启:新增或升级 pip 安装的第三方包,需要重启服务端
  3. entity_defs 中的类型定义types.xml 等自定义类型定义的修改需要重启
  4. 建议先在测试环境验证:热更前建议先在开发环境测试脚本的正确性