守护进程架构说明.md 3.2 KB

守护进程架构说明

概述

软总线系统采用守护进程 + 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 格式)

{
  "running": true,
  "status": "running",
  "initialized": true,
  "deviceCount": 5,
  "onlineDeviceCount": 3
}

getLoadInfo() -> QString

获取核心服务负载情况(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. 编译

mkdir build
cd build
cmake ..
make

会生成两个可执行文件:

  • soft_bus - GUI 客户端
  • soft_bus_daemon - 守护进程

2. 启动守护进程

# 方式1: 前台运行(用于调试)
./soft_bus_daemon

# 方式2: 后台运行
./soft_bus_daemon &

# 方式3: 使用 systemd(推荐生产环境)
sudo systemctl start soft_bus_daemon

3. 启动 GUI 客户端

./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. 添加守护进程的健康检查机制