在 Linux + C++ 环境下做“热更新”(不重启进程更新代码/配置/逻辑),常见方案按更新粒度从简单到复杂如下:
inotify 或定时 reload示例思路:
// inotify 监听 config.json
int fd = inotify_init();
inotify_add_watch(fd, "/etc/app/config.json", IN_MODIFY);
更新时:
std::atomic<Config*>)✅ 优点:简单、安全
❌ 缺点:只能改数据,不能改逻辑
.sodlopen / dlsym / dlclose 加载void* handle = dlopen("./logic.so", RTLD_NOW);
auto func = (void(*)())dlsym(handle, "process");
func();
热更新流程:
logic.sodlclose 旧 sodlopen 新 so✅ 优点:可更新逻辑
⚠️ 注意:
class Plugin {
public:
virtual void run() = 0;
};
✅ 适合:长期服务(网关、游戏、交易系统)
gcc -fpluginlivepatch(内核态).text 段(危险)⚠️ 一般不推荐业务使用
✅ 最稳定 ✅ 适合高可用服务
| 场景 | 推荐 |
|---|---|
| 配置 | inotify + 原子指针 |
| 业务规则 | so 热加载 |
| 长连接服务 | master-worker |
| 游戏/交易 | so + 插件 |
如果你愿意,可以告诉我:
我可以直接给你一套可落地的 C++ 热更新框架代码。