# 守护进程架构说明 ## 概述 软总线系统采用**守护进程 + GUI 客户端**的架构,核心服务完全独立于 Qt GUI 运行。 ## 架构设计 ### 1. 守护进程 (soft_bus_daemon) - **位置**: `src/daemon/daemon_main.cpp` - **特点**: - 使用 `QCoreApplication`(不依赖 Qt GUI) - 独立进程运行,不依赖界面 - 通过 D-Bus 提供状态查询和负载监控接口 - 管理设备总线和消息路由 ### 2. GUI 客户端 (soft_bus) - **位置**: `main.cpp`, `mainwindow.cpp` - **特点**: - 使用 `QApplication`(Qt GUI) - 通过 D-Bus 连接守护进程 - 显示核心服务状态和负载情况 - 可以关闭窗口而不影响核心服务运行 ## D-Bus 接口 ### 服务名称 - `com.softbus.Daemon` ### 对象路径 - `/com/softbus/Daemon` ### 接口方法 #### `isRunning() -> bool` 检查核心服务是否运行 #### `getStatus() -> QString` 获取核心服务状态信息(JSON 格式) ```json { "running": true, "status": "running", "initialized": true, "deviceCount": 5, "onlineDeviceCount": 3 } ``` #### `getLoadInfo() -> QString` 获取核心服务负载情况(JSON 格式) ```json { "messageRate": 10.5, "totalMessagesProcessed": 12345, "cpuUsage": 0.0, "memoryUsage": 0.0, "timestamp": "2024-01-01T12:00:00" } ``` #### `getDeviceCount() -> int` 获取已注册的设备数量 #### `getMessageStats() -> QString` 获取消息处理统计(JSON 格式) ### 信号 #### `statusChanged(QString status)` 核心服务状态变化时发出 #### `loadInfoUpdated(QString loadInfo)` 负载信息更新时发出(每5秒) ## 使用方法 ### 1. 编译 ```bash mkdir build cd build cmake .. make ``` 会生成两个可执行文件: - `soft_bus` - GUI 客户端 - `soft_bus_daemon` - 守护进程 ### 2. 启动守护进程 ```bash # 方式1: 前台运行(用于调试) ./soft_bus_daemon # 方式2: 后台运行 ./soft_bus_daemon & # 方式3: 使用 systemd(推荐生产环境) sudo systemctl start soft_bus_daemon ``` ### 3. 启动 GUI 客户端 ```bash ./soft_bus ``` GUI 会自动连接到守护进程并显示状态。 ### 4. 状态显示 在 GUI 的状态栏右侧会显示: - **核心服务状态**: 运行中/未运行,以及设备数量 - **负载信息**: 消息处理速率和总消息数 ## 优势 1. **核心服务独立**: 核心服务不依赖 Qt GUI,可以独立运行 2. **进程隔离**: GUI 崩溃不影响核心服务 3. **资源优化**: 核心服务只使用 Qt Core,不加载 GUI 库 4. **易于部署**: 可以将守护进程部署为系统服务 5. **多客户端**: 可以同时运行多个 GUI 客户端连接同一个守护进程 ## 注意事项 1. **D-Bus 权限**: 如果使用系统 D-Bus,可能需要配置权限策略 2. **消息统计**: 当前消息统计使用占位符,需要从实际的消息处理模块获取 3. **CPU/内存监控**: 当前使用占位符,可以集成系统监控 API(如 `/proc/self/stat`) ## 未来改进 1. 添加实际的 CPU 和内存使用率监控 2. 实现消息处理统计的实时更新 3. 添加守护进程的配置文件支持 4. 实现守护进程的日志管理 5. 添加守护进程的健康检查机制