# Json-Rpc框架项目 **Repository Path**: aramae/json-rpc-framework-project ## Basic Information - **Project Name**: Json-Rpc框架项目 - **Description**: 一个基于 C++11、Muduo 和 JsonCpp 从零实现的轻量级 JSON-RPC 框架。支持同步/异步 RPC 调用、服务注册与发现、以及 Topic 发布订阅机制,是学习分布式通信与网络编程的极佳实践项目。 - **Primary Language**: C++ - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-08-30 - **Last Updated**: 2026-10-22 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ```markdown # Aramae JSON-RPC Framework 一个基于 C++11 从零实现的轻量级、高性能 JSON-RPC 分布式通信框架。 ## 📖 项目简介 本项目是一个基于 **Muduo** 网络库和 **JsonCpp** 序列化库构建的 RPC 框架。核心代码采用纯头文件(`.hpp`)设计,旨在保持轻量级的同时,提供完整的分布式服务治理能力。 框架不仅实现了基础的远程过程调用(RPC),还内置了服务注册与发现中心(Registry)以及基于主题(Topic)的发布/订阅(Pub/Sub)机制,是学习 C++ 网络编程、分布式微服务架构和 RPC 底层原理的极佳实践项目。 ## ✨ 核心特性 * **轻量级设计**:纯头文件(Header-only)封装,无冗长的源码编译过程,接入简单。 * **多模式 RPC 调用**:支持三种调用模式,适应不同业务场景: * **同步调用**:阻塞等待服务端返回结果。 * **异步 Future 调用**:立即返回 `std::future`,稍后获取结果。 * **异步回调调用**:传入回调函数,结果返回时自动触发。 * **服务注册与发现**:内置简易注册中心。服务端启动时自动注册,客户端调用前动态发现服务地址。 * **发布/订阅机制**:基于 Topic 实现的消息广播,支持多客户端实时接收服务端推送的消息。 * **自定义应用层协议**:基于 JSON 进行数据序列化,自定义消息类型(MType),并完美解决 TCP 粘包问题。 ## 🛠️ 技术栈 * **开发语言**:C++11(深度使用智能指针、`std::function`、`std::promise/future` 等现代特性)。 * **网络模型**:Muduo(基于 Reactor 模式的非阻塞 I/O 网络库)。 * **序列化**:JsonCpp(JSON 数据解析与组装)。 * **构建工具**:Makefile。 ## 📂 目录结构 ```text source/ |-- client/ # 客户端核心实现 | |-- rpc_caller.hpp # RPC 调用器(同步/异步/回调封装) | |-- rpc_client.hpp # 客户端总管 | |-- rpc_registry.hpp # 客户端服务发现 | `-- rpc_topic.hpp # 客户端发布订阅 |-- server/ # 服务端核心实现 | |-- rpc_registry.hpp # 服务端注册中心 | |-- rpc_router.hpp # 路由分发处理 | |-- rpc_server.hpp # 服务端总管 | `-- rpc_topic.hpp # 服务端主题管理 |-- common/ # 公共基础组件 | |-- abstract.hpp # 基础抽象类 | |-- detail.hpp # 工具宏与辅助函数 | |-- dispatcher.hpp # 消息分发器 | |-- fields.hpp # 协议字段定义 | |-- message.hpp # 消息封装与序列化 | `-- net.hpp # Muduo 网络层二次封装 `-- test/ # 功能测试用例 |-- test1/ # 基础直连 RPC 测试 |-- test2/ # 基于注册中心的 RPC 测试 `-- test3/ # 发布/订阅(Topic)功能测试 ``` ## 🚀 快速开始 ### 1. 环境依赖 在编译本项目前,请确保已安装以下依赖: * g++ (支持 C++11) * cmake (3.0+) * muduo 网络库 * jsoncpp 库 ### 2. 编译指南 由于不同机器的依赖安装路径不同,请根据你的实际路径修改对应 `test` 目录下的 `Makefile`。 ```makefile # 示例:将 Makefile 中的路径替换为你机器上的实际路径 CFLAG= -std=c++11 -I/your/path/to/muduo/include -I/usr/include/jsoncpp LFLAG= -L/your/path/to/muduo/lib -L/usr/lib64 -ljsoncpp -lmuduo_net -lmuduo_base -pthread ``` 进入对应测试目录并编译: ```bash cd source/test/test1 make ``` ## 🏃 运行演示 ### 测试一:基础直连 RPC (test1) 验证基础 RPC 通信与三种调用方式(同步、异步 Future、异步回调)。 * 终端 1:`./server` * 终端 2:`./client` * 预期结果:客户端输出 `result: 33`, `result: 77`, `callback result: 121`。 ### 测试二:服务注册与发现 (test2) 验证分布式环境下的服务注册、发现及调用链路。 * 终端 1(启动注册中心):`./reg_server` * 终端 2(启动服务端):`./rpc_server` (会自动向注册中心注册 `Add` 服务) * 终端 3(启动客户端):`./rpc_client` (会向注册中心查询并直连服务端) * 预期结果:注册中心打印注册与查询日志,客户端输出正确计算结果。 ### 测试三:发布/订阅机制 (test3) 验证基于 Topic 的消息广播。 * 终端 1(消息中转服务端):`./server` * 终端 2(订阅者):`./subscribe_client` * 终端 3(发布者):`./publish_client` * 预期结果:发布端发送消息,订阅端实时打印出 `Hello World-0` 到 `Hello World-9` 等推送内容。 ## 💡 核心技术解析 * **TCP 粘包处理**:框架在网络层自定义了应用层协议头(包含消息长度),确保反序列化时获取完整的 JSON 数据包。 * **异步机制**:依赖 C++11 的 `std::future` 和 `std::promise`,在 `rpc_caller` 中构建了 `UUID -> Promise` 的映射表,收到响应时根据 UUID 唤醒对应线程。 * **反射与工厂模式**:服务端通过 `SDescribeFactory` 动态构建服务描述,将业务函数注册到 `RpcRouter` 的路由表中。 ``` ---