现代 C++(C++20),简单易用的 RPC 框架
| 操作系统 (编译器版本) | 状态 |
|---|---|
| Ubuntu 22.04 (clang 14.0.0) | |
| Ubuntu 22.04 (gcc 11.2.0) | |
| macOS Monterey 12 (AppleClang 14.0.0.14000029) | |
| Windows Server 2022 (MSVC 19.33.31630.0) | |
| c++20,性能高,跨平台,易于使用的 RPC 框架。 | |
| 爱上 RPC 真是太容易了。 | |
| 现代 C++ 开发的 RPC 库就是这样简单易用! |
rest_rpc 是一个高性能、易用、跨平台、仅包含头信息的基于 c++20 协程的 RPC 库,其目标是使 TCP 通信变得非常简单易用,即使不懂网络通信的人也可以直接使用它。它依赖于 header-only 的 standalone asio(tag:asio-1-36-0)。 使用起来非常方便,用户只需要关注自己的业务逻辑即可。
需要完全支持 c++20 的编译器: gcc12+、clang15+、msvc2022
rest_rpc 为用户提供了非常简单易用的接口,几行代码即可实现 rpc 通信。下面来看第一个示例。
//服务端注册加法rpc服务
int add(rpc_conn conn, int a, int b) { return a + b; }
int main(){
rpc_server server("127.0.0.1:9004", std::thread::hardware_concurrency());
server.register_handler<add>();
server.start();
}//客户端调用加法的rpc服务
int main(){
auto rpc_call = []() -> asio::awaitable<void> {
rpc_client client;
auto ec = co_await client.connect("127.0.0.1:9004");
if(ec) {
REST_LOG_ERROR << ec.message();
co_return;
}
auto r = co_await client.call<add>(1, 2);
if(r.ec == rpc_errc::ok) {
REST_LOG_INFO << "call result: " << r.value;
assert(r.value == 3);
}
};
sync_wait(rpc_call());
}//1.先定义person对象
struct person {
int id;
std::string name;
int age;
};
//2.提供rpc服务
person get_person(person p) {
p.name = "jack";
return p;
}
int main(){
rpc_server server("127.0.0.1:9004", std::thread::hardware_concurrency());
server.register_handler<get_person>();
server.start();
}暂无开放 Issues,或尚未同步最近议题。