# Sparrow
**Repository Path**: LinuxTaoist/Sparrow
## Basic Information
- **Project Name**: Sparrow
- **Description**: C++中间件服务,技术文章发布于微信公众号《开源519》
- **Primary Language**: C++
- **License**: MIT
- **Default Branch**: Sparrow-dev
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 36
- **Forks**: 13
- **Created**: 2022-05-19
- **Last Updated**: 2026-09-04
## Categories & Tags
**Categories**: microservice
**Tags**: 微服务, 中间件, Cpp, 设计模式, rpc
## README
# Sparrow:Linux C++ 嵌入式中间件
👉 [English](README.en.md)
## 📌 项目定位
`Sparrow` 是一套面向 `Linux / 嵌入式设备` 场景的 C++ 中间件框架,基于 `Epoll` 事件驱动与服务化设计,适合构建高并发、低耦合、可观测、可扩展的设备系统基础设施。
它以工程实践为导向,关注的是:
- 高性能事件调度
- 模块化服务通信
- 稳定运行与诊断
- 平台/硬件适配能力
- 开发者快速接手与持续演进
## ✨ 为什么值得关注
- **事件驱动引擎**
统一处理 IO、定时器、线程任务与信号事件,适合高并发设备中间件场景
- **服务化架构**
采用 Binder / MQ / 事件分发机制,模块之间松耦合,扩展更灵活
- **可观测性强**
日志、属性、调试节点、状态监控可直接用于现场问题排查
- **稳定运行支持**
进程守护、状态采集、异常观测、重启恢复,适合设备端持续稳定运行
- **工程化设计**
目录结构清晰,示例、测试、文档、平台适配能力较完整,适合快速落地
## 🚀 3 分钟快速上手
### 1. 环境要求
- Linux / Ubuntu
- C++11 及以上
- CMake / gcc / make
### 2. 编译项目
```bash
cd /path/to/Sparrow
cd Build
./rebuild_default.sh
```
编译产物通常位于:
```bash
cd Release
ls
```
常见目录:
- `Bin`:可执行文件
- `Lib`:静态/动态库
- `Include`:导出头文件
- `Cache`:编译与运行缓存
### 3. 启动服务
```bash
cd Release/Bin
./servicemanagersrv
```
### 4. 查看日志
```bash
tail -f /tmp/sprlog/sparrow.log
```
## 📢 核心能力
| 功能 | 关键特性 | 价值说明 |
|---|---|---|
| 进程管理 | 守护、重启、状态监控、异常恢复 | 保障核心服务稳定运行 |
| 日志管理 | 分级日志、格式化输出、持久化 | 快速定位问题、减少排障成本 |
| Binder / RPC | 服务注册、消息转发、同步/异步调用 | 支撑模块协作与跨进程通信 |
| 消息中转 | 广播、订阅、MQ 事件分发 | 降低耦合、提高扩展性 |
| Property 管理 | 动态读写、变更通知、配置导出 | 让系统配置更灵活、更可调测 |
| 调试节点 | 动态调试入口、状态观测、在线排查 | 减少重启和二次开发成本 |
| 定时器与线程池 | 周期任务、任务异步提交、回调触发 | 提高并发与任务处理效率 |
| 多平台适配 | 分层适配、平台隔离、跨设备支持 | 方便移植到不同硬件和平台 |
## 🏗️ 主仓结构速览
```text
Sparrow/
├── 3rdAdapter/ // 第三方库适配层
├── 3rdParty/ // 第三方依赖
├── Build/ // 编译脚本入口
├── CMakeLists.txt // 顶层构建入口
├── Components/ // 服务组件
├── Configs/ // 配置文件
├── Core/ // 核心框架模块
├── Debug/ // 调试与监控工具
├── Docs/ // 工程文档
├── Examples/ // 示例程序
├── Hardware/ // 硬件适配层
├── Platform/ // 平台配置层
├── PrivateAPIs/ // 内部接口
├── PublicAPIs/ // 对外接口
├── Release/ // 编译输出目录
├── TestCase/ // 测试用例
├── Tools/ // 质量工具
├── Util/ // 通用工具库
├── UtilModules/ // 通用功能模块
├── LICENSE // 开源许可证
├── README.md // 主仓说明
├── README.en.md // 英文说明
├── modules_config.cmake // 模块配置
├── version.cmake // 版本配置
└── ...
```
## 🔌 如果需要扩展,放哪更合适
项目的扩展入口是明确分层的,建议按“能力边界”放到对应目录:
- **业务功能扩展**
`Components/Business/`、`PublicAPIs/`
适合放客户特定业务、对外能力封装、业务服务模块
- **平台差异化配置**
`Platform/` 适合放不同平台的编译参数、环境差异、配置文件
- **硬件适配**
`Hardware/` 适合放驱动、板卡抽象和 HAL 层实现
- **通用工具能力**
`Util/`、`UtilModules/` 适合放可复用的通用库、协议处理、算法与基础组件
- **主仓核心保持稳定**
`Core/` 只放最通用的框架能力,不建议把客户化或平台特定逻辑直接塞进核心层
> 也就是说:主仓负责 “通用基础设施”,扩展层负责 “业务、平台、硬件差异”。这样最容易维护,也最符合当前工程结构。
## 📚 文档资源
- [C++ 编程规范](Docs/C++编程规范.md):统一代码风格,保持工程一致性
- [Issue 提交规范](Docs/Issue提交规范.md):统一协作与质量要求
- [版本管理](Docs/版本管理.md):版本发布和维护说明
- [疑难杂症](Docs/疑难杂症.md):常见问题、故障处理与经验沉淀
## 🎯 适用场景
- 智能硬件:摄像头、传感器、终端设备、控制器
- 车载系统:T-Box、车载网关、智能座舱
- 工业与边缘:现场控制、边缘网关、数据采集节点
- 通用设备端中间件:需要稳定、可扩展、易观测的 Linux 系统
## 🤝 适合谁来用
- 需要做 Linux 嵌入式中间件的工程团队
- 想要统一日志、状态、调试能力的设备软件开发者
- 需要强扩展性和平台适配能力的研发人员
## 📄 许可
本项目采用 MIT 许可证,详情见 [LICENSE](LICENSE)。
## 💎 一句话总结
如果你要一个“可直接上手、可继续扩展、便于稳定运行和排障”的 Linux C++ 设备中间件底座,`Sparrow` 就是值得重点关注的主仓入口。