# json_rpc **Repository Path**: Ape-LHR/json_rpc ## Basic Information - **Project Name**: json_rpc - **Description**: JSON-RPC是一个基于C++开发的分布式远程过程调用框架,采用JSON作为数据交换格式,支持服务注册与发现、主题发布/订阅等高级功能。该项目基于Muduo网络库实现,提供了高性能、可扩展的RPC通信能力,适用于构建分布式系统和微服务架构。 - **Primary Language**: C++ - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 2 - **Created**: 2025-11-04 - **Last Updated**: 2026-02-06 ## Categories & Tags **Categories**: Uncategorized **Tags**: JSON, rpc ## README # JSON-RPC 分布式RPC框架 ## 项目背景 JSON-RPC是一个基于C++开发的分布式远程过程调用框架,采用JSON作为数据交换格式,支持服务注册与发现、主题发布/订阅等高级功能。该项目基于Muduo网络库实现,提供了高性能、可扩展的RPC通信能力,适用于构建分布式系统和微服务架构。 ## 项目架构 ### 架构设计 ![输入图片说明](example/image/image1.png) ### 完整结构 ![输入图片说明](example/image/frame.png) ### 整体架构 JSON-RPC框架采用分层设计,主要包含以下几个层次: 1. **网络通信层**:基于Muduo网络库实现TCP通信,提供高效的事件驱动网络IO 2. **协议层**:定义JSON格式的消息协议,支持多种消息类型 3. **服务层**:实现RPC服务、注册中心服务和主题服务 4. **客户端层**:提供RPC客户端、注册客户端和主题客户端 ### 核心组件 ```text JSON-RPC框架 ├── 通用组件 (common) │ ├── 消息定义 (message.hpp) - 定义各类JSON消息格式 │ ├── 抽象接口 (abstract.hpp) - 定义基础抽象类 │ ├── 消息分发 (dispatcher.hpp) - 实现消息路由与分发 │ ├── 字段定义 (fields.hpp) - 定义协议字段和枚举 │ ├── 日志系统 (log.hpp) - 提供日志记录功能 │ ├── 网络抽象 (net.hpp) - 封装网络操作 │ └── 工具函数 (utils.hpp) - 提供通用工具函数 ├── 服务端组件 (server) │ ├── RPC服务器 (rpc_server.hpp) - 实现RPC服务端 │ ├── 注册中心服务器 (registry_mgr_svr.hpp) - 实现服务注册中心 │ ├── 主题服务器 (topic_mgr_svr.hpp) - 实现主题发布/订阅服务 │ └── RPC路由器 (rpc_router.hpp) - 实现RPC请求路由 └── 客户端组件 (client) ├── RPC客户端 (rpc_client.hpp) - 实现RPC客户端 ├── 注册客户端 (registry_mgr_cli.hpp) - 实现服务注册客户端 ├── 主题客户端 (topic_mgr_cli.hpp) - 实现主题客户端 ├── 请求器 (requestor.hpp) - 处理请求响应 └── RPC调用器 (rpc_caller.hpp) - 实现RPC调用 ``` ## 功能模块 ### 1. RPC服务模块 RPC服务模块是框架的核心功能,支持远程方法调用: - **服务端**:提供RPC服务,接收客户端请求并返回结果 - **客户端**:发起RPC调用,支持同步和异步调用方式 - **消息类型**:RpcRequest/RpcResponse,包含方法名、参数和返回结果 ### 2. 服务注册与发现模块 服务注册与发现模块实现了微服务架构中的服务治理功能: - **注册中心**:集中管理所有服务提供者的信息 - **服务注册**:服务提供者向注册中心注册自己的服务方法 - **服务发现**:服务消费者从注册中心查询服务提供者信息 - **状态通知**:服务上线/下线状态变化通知 ### 3. 主题发布/订阅模块 主题发布/订阅模块实现了消息队列功能: - **主题管理**:创建、删除主题 - **订阅管理**:订阅、取消订阅主题 - **消息发布**:向主题发布消息 - **消息推送**:将消息推送给所有订阅者 ### 4. 消息分发模块 消息分发模块实现了消息的路由与分发: - **类型安全**:基于模板的消息分发机制 - **动态注册**:支持运行时注册消息处理器 - **线程安全**:使用互斥锁保证并发安全 ## 消息协议 JSON-RPC使用JSON格式作为消息协议,支持以下消息类型: 1. **RPC请求/响应** (REQ_RPC/RSP_RPC) - 请求:包含方法名和参数 - 响应:包含返回码和结果 2. **主题请求/响应** (REQ_TOPIC/RSP_TOPIC) - 支持创建、删除、订阅、取消订阅和发布操作 3. **服务请求/响应** (REQ_SERVICE/RSP_SERVICE) - 支持服务注册、发现、上线和下线操作 ## 使用示例 ### RPC服务端示例 ```cpp #include "source/server/rpc_server.hpp" // 定义服务 class AddService : public RPC::ServiceDescribe { public: AddService() : ServiceDescribe("Add") {} void onCall(const Json::Value& params, Json::Value& result) override { int num1 = params["num1"].asInt(); int num2 = params["num2"].asInt(); result = num1 + num2; } }; int main() { // 创建RPC服务器 RPC::server::RpcServer server({"0.0.0.0", 8080}, true, {"127.0.0.1", 9090}); // 注册服务 auto add_service = std::make_shared(); server.registerMethod(add_service); // 启动服务器 server.start(); return 0; } ``` ### RPC客户端示例 ```cpp #include "source/client/rpc_client.hpp" int main() { // 创建RPC客户端(启用服务发现) RPC::client::RpcClient client(true, "127.0.0.1", 9090); // 调用远程方法 Json::Value params; params["num1"] = 10; params["num2"] = 20; Json::Value result; if (client.call("Add", params, result)) { std::cout << "Result: " << result.asInt() << std::endl; } return 0; } ``` ### 主题发布/订阅示例 ```cpp // 发布者 RPC::client::TopicClient pub_client("127.0.0.1", 8081); pub_client.createTopic("news"); pub_client.publish("news", "Hello, world!"); // 订阅者 RPC::client::TopicClient sub_client("127.0.0.1", 8081); sub_client.subscribe("news", [](const std::string& msg) { std::cout << "Received: " << msg << std::endl; }); ``` ## 编译与运行 ### 依赖项 - C++11或更高版本 - Muduo网络库 - JsonCpp库 - CMake构建系统 ### 运行测试 项目提供了多个测试用例,位于`source/test`目录下: ```bash # 运行RPC测试 cd source/test/rpcsvr make ./test_server & ./test_client # 运行注册中心测试 cd source/test/registry make ./registry_server & ./rpc_server & ./rpc_client ``` ## 项目特点 1. **高性能**:基于Muduo网络库,采用事件驱动模型,支持高并发 2. **易扩展**:模块化设计,易于扩展新功能 3. **类型安全**:使用C++模板和智能指针,保证类型安全 4. **服务治理**:内置服务注册与发现机制,支持微服务架构 5. **消息队列**:支持主题发布/订阅模式,实现解耦通信 6. **多种调用方式**:支持同步、异步和回调三种RPC调用方式