# brpc_async **Repository Path**: lang2020/brpc_async ## Basic Information - **Project Name**: brpc_async - **Description**: No description available - **Primary Language**: C++ - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-04-29 - **Last Updated**: 2026-05-20 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # brpc_async ## 项目简介 `brpc_async` 是一个基于 [brpc](https://github.com/apache/brpc) 的异步 RPC 示例与封装实践,目标是提供一套更易于复用、扩展和维护的调用框架。 该目录下的实现主要展示了如何在 brpc 的基础上,统一封装请求创建、异步回调、上下文管理以及同步/异步请求接口,便于业务代码以更少的样板代码接入 RPC 调用。 ## 设计目标 - **封装通信细节**:将 brpc 的 channel、stub、closure、completion 等细节收敛到框架内部。 - **统一调用接口**:对外提供更一致的同步与异步请求入口。 - **增强可复用性**:通过模板参数适配不同的 `Request`、`Response` 和 `Stub` 类型。 - **简化业务接入**:业务侧只需关注请求参数、结果处理和回调逻辑。 - **保留扩展能力**:为重试、超时、回调、上下文传递等能力预留扩展空间。 ## 架构说明 当前实现可以分为三层: ### 1. 业务适配层 在 `main.cpp` 中通过类型别名完成具体 RPC 类型的绑定,例如: - `EchoAsyncClient` - `EchoObjectRequest` - `EchoObjectOperation` 这一层的作用是把模板实例化结果固定下来,让业务代码保持简洁,并降低阅读和维护成本。 ### 2. 请求封装层 `ObjectOperation` 与 `ObjectRequest` 负责承载请求数据,并提供同步/异步两种调用方式: - `request()`:适合调试、串行流程或需要立即获取结果的场景。 - `async_request()`:适合高并发、回调驱动的场景。 同时,请求对象通过构造函数显式接收 client 指针,避免隐式全局依赖,提升调用关系的透明度。 ### 3. 异步调度层 `BRPCAsyncClientTemplate` 负责真正的 brpc 调用编排,包括: - 请求上下文构造 - closure 生命周期管理 - completion 回调触发 - 超时与重试控制 这一层屏蔽了大部分 brpc 运行时细节,业务侧无需直接操作底层 `Channel` 和 `Closure`。 ## 回调与上下文 项目提供了两类回调方式: - **成员函数回调**:适合对象内部状态更新与类成员处理。 - **lambda 回调**:适合局部逻辑组合和轻量业务处理。 `Context` 用于统一承载“请求完成后的处理动作”,从而让同步和异步路径拥有一致的结果通知机制。 ## 日志风格 当前代码中已统一使用 `ldout(...) << ... << dendl` 的ceph输出形式,便于后续进一步抽象为独立日志封装,或者适配不同项目的日志规范。 ## 构建与运行 ### 构建 ```bash make clean && make ENABLE_ASAN=1 ``` ### 运行 ```bash ./echo_server ASAN_OPTIONS=detect_leaks=1 ./echo_client ``` ## 后续优化方向 - **统一命名与职责边界**:继续收敛 `ObjectRequest`、`ObjectOperation`、`Context` 等抽象的语义。 - **增强错误处理机制**:引入更系统的错误码、结果对象和失败恢复策略。 - **拆分目录职责**:将框架核心、示例代码和测试代码进一步解耦,提升工程化程度。 - **补充观测能力**:增加更完整的日志、指标和链路信息,便于排障与性能分析。 ## 参与贡献 欢迎基于该示例继续扩展新的 RPC 接口、改进异步封装能力,或补充更多工程化能力。 ## 其他说明 当前实现同时支持成员函数回调与 lambda 回调,后续可以在此基础上继续扩展更丰富的业务适配能力。