服务管理器
公共头文件:
#include "brookesia/service_manager.hpp"
概述
brookesia_service_manager 是 ESP-Brookesia 的服务管理框架核心组件,统一提供服务生命周期管理、函数注册与事件分发、本地调用与远程 RPC 调用等能力。
特性
生命周期管理:集中式管理服务初始化、启动、停止与反初始化流程。
双通信模式:同时支持本地高性能调用和基于 TCP/JSON 的远程 RPC。
统一函数与事件模型:提供函数定义、注册、分发与事件订阅机制。
线程安全调度:可通过本地运行器与任务调度机制实现并发安全执行。
解耦集成:应用代码通过统一 API 调用服务,不依赖具体服务实现细节。
通信架构
brookesia_service_manager 支持本地模式和远程 RPC 两种通信方式,前者适合同设备内的高频调用,后者适合跨设备或跨语言场景。
本地模式
本地模式下,应用通过 ServiceManager 绑定服务后,直接通过 ServiceBase 访问函数和事件注册表,调用链路短、性能高,并且不需要网络通信。
flowchart TB
App["App/User Code"]
SM["ServiceManager"]
Binding["ServiceBinding"]
Base["ServiceBase"]
Registry["FunctionRegistry & EventRegistry"]
App -->|"bind()"| SM
SM -->|"returns"| Binding
Binding -->|"get_service()"| Base
Base -->|"call_function_sync()<br/>call_function_async()<br/>subscribe_event()"| Registry
style App fill:#e1f5ff
style SM fill:#fff4e1
style Binding fill:#f0e1ff
style Base fill:#e1ffe1
style Registry fill:#ffe1e1
远程 RPC 模式
远程 RPC 模式下,客户端通过 TCP Socket 和 JSON 协议访问远端服务,适合将服务能力暴露给其他设备或其他语言环境。
flowchart LR
subgraph Client_Side["Client Device"]
App["App/User Code"]
Client["RPC Client"]
Dispatcher["EventDispatcher"]
end
subgraph Network["Network Layer"]
DataLink["DataLink<br/>(TCP Socket)"]
end
subgraph Server_Side["Server Device"]
Server["RPC Server"]
Base["ServiceBase"]
Registry["EventRegistry &<br/>FunctionRegistry"]
end
App --->|"call_function / <br/>subscribe_event"| Client
Client --->|"Request"| DataLink
DataLink --->|"Response"| Client
DataLink <-->|"Forward"| Server
Server <-->|"invoke"| Base
Base <-->|"access"| Registry
App <---|"event callback"| Dispatcher
DataLink -.->|"Notify"| Dispatcher
style App fill:#e1f5ff
style Client fill:#f0e1ff
style Dispatcher fill:#ffe1f0
style DataLink fill:#fff4e1
style Server fill:#f0e1ff
style Base fill:#e1ffe1
style Registry fill:#ffe1e1
本地调用 vs 远程 RPC
对比项 |
本地调用(ServiceBase) |
远程 RPC(rpc::Client) |
|---|---|---|
部署位置 |
同一设备内 |
跨设备通信 |
通信方式 |
直接函数调用 |
TCP Socket + JSON |
延迟 |
毫秒级,较低 |
受网络影响,通常更高 |
性能 |
无序列化开销,性能更高 |
需要序列化与反序列化 |
适用频率 |
高频调用 |
中低频调用 |
线程安全 |
具备异步调度与保护机制 |
依赖网络隔离 |
语言支持 |
C++ |
语言无关 |
网络依赖 |
不需要网络 |
需要同一局域网或可达网络 |
典型场景 |
设备内服务协作 |
跨设备或跨语言服务调用 |
模块介绍
服务运行层
服务运行层负责服务生命周期管理、调用与事件执行调度、依赖绑定和与 RPC 对接,核心由 ServiceBase、ServiceManager 和 LocalTestRunner 构成。
函数系统
函数系统用于定义服务可调用接口、校验调用参数并分派到具体处理函数,核心包含函数定义模型和函数注册表。
事件系统
事件系统用于描述事件结构、校验事件数据并将事件分发到本地订阅者或远程 RPC 订阅者,核心包含事件定义、注册表和调度器。
RPC 通信
RPC 子系统通过 TCP + JSON 对外暴露服务函数与事件能力,提供协议层、数据链路层、连接桥接层及客户端/服务端实现。
通用
通用模块定义服务管理器中复用的通用类型和宏,为其他模块提供公共基础能力。