C++开发:rest_rpc简介
【链接】GitHub - qicosmos/rest_rpc: modern C++(C++11), simple, easy to use rpc framework
rest_rpc是一个高性能 C++ RPC 框架,适合用C++构建高性能分布式系统,其目标是让tcp通信变得非常简单易用,即使不懂网络通信的人也可以直接使用它。
核心组件

1. RPC服务器(rpc_server.h)
-
使用ASIO管理客户端连接
-
通过
io_service_pool实现线程池 -
通过
router类处理请求路由 -
支持常规RPC调用和发布-订阅模式
-
包含带超时的连接管理
-
支持SSL/TLS加密
2. RPC客户端(rpc_client.hpp)
-
提供同步和异步调用机制
-
支持基于future和基于callback的异步调用
-
实现发布-订阅功能
-
带自动重连的连接管理
-
包含超时机制
-
支持SSL/TLS加密
3. 序列化与消息传递
-
编解码器(codec.h): 使用MessagePack进行序列化
-
协议: 自定义二进制协议,头部包含:
-
魔数
-
请求类型
-
消息体长度
-
请求ID
-
函数ID
-
4. 工具类
-
路由器(router.h): 使用MD5哈希将函数名映射到处理程序
-
连接管理(connection.h): 处理单个客户端连接
-
线程池(io_service_pool.h): 管理IO服务线程
-
客户端工具(client_util.hpp): 结果处理的辅助函数
-
元编程工具(meta_util.hpp): 模板元编程辅助
-
MD5(md5.hpp): MD5哈希实现
主要特性
-
协议设计:
-
带固定长度头部的二进制协议
-
支持请求-响应和发布-订阅模式
-
带结果码的错误处理
-
-
性能优化:
-
线程池实现并发请求处理
-
全异步IO
-
缓冲区管理减少内存分配
-
-
错误处理:
-
全面的错误码
-
超时机制
-
连接错误回调
-
-
可扩展性:
-
支持自定义序列化
-
可插拔SSL/TLS
-
可定制的错误处理
-
-
跨语言支持:
-
明确的客户端语言标识
-
对Java客户端的特殊处理
-
实现细节
rpc_server服务端
rpc_server类依赖于router来进行消息路由。rpc_server创建和管理多个connection实例,每个实例代表一个客户端连接。router负责注册处理器,并根据请求的内容将其转发给相应的处理器。connection类提供了与单个客户端通信所需的方法,包括响应、发布消息等功能。
这种设计允许rpc_server专注于网络层和服务的生命周期管理,而具体的业务逻辑则通过在router中注册的不同处理器来实现。这样可以使得系统更加模块化,便于扩展和维护

-
使用ASIO的io_service实现每个线程一个核心的模型
-
维护连接状态和超时
-
实现干净的关闭过程
-
支持成员和非成员函数处理程序
客户端
-
提供同步和异步API
-
实现自动重连
-
管理请求超时
-
支持基于future和callback的异步模式
序列化
-
使用MessagePack实现高效的二进制序列化
-
处理简单和复杂类型
-
包含反序列化的错误处理
使用模式
服务器设置
rpc_server server(9000, std::thread::hardware_concurrency());
server.register_handler("add", [](int a, int b) { return a + b; });
server.run();
客户端调用
rpc_client client("localhost", 9000);
client.connect();
int result = client.call<int>("add", 2, 3);
异步调用
auto future = client.async_call<FUTURE>("add", 2, 3);
auto result = future.get().as<int>();
发布-订阅
// 服务端
server.publish("news", "Breaking news!");
// 客户端
client.subscribe("news", [](string_view data) {
std::cout << "Received: " << data << std::endl;
});
优势
-
性能: 异步设计加线程池
-
灵活性: 支持多种调用模式
-
健壮性: 全面的错误处理
-
可扩展性: 易于添加新功能
-
跨平台: 使用标准C++和ASIO
更多推荐
所有评论(0)