本文作者:HelloGitHub-Anthony
HelloGitHub 推出的《讲解开源项目》系列,本期介绍基于 C++ 的 RPC 开源框架——rest_rpc,一个让小白也可以快速(10 分钟)开发 RPC 服务的框架。
项目地址:https://github.com/qicosmos/rest_rpc
rest_rpc 是一个高性能、易用、跨平台、header only 的 C++11 RPC 库,它的目标是让 TCP 通信变得非常简单易用,即使不懂网络通信的人也可以直接使用它、快速上手。同时使用者只需要关注自己的业务逻辑即可。
简而言之 rest_rpc 能让您能在没有任何网络编程相关知识的情况下通过几行代码快速编写属于自己的网络程序,而且使用非常方便,是入门网络编程及 RPC 框架的不二之选!
一、预备知识 1.1 什么是 RPCRPC 是 Remote Procedure Call 即 远程过程调用 的缩写。
1.2 RPC 有什么用举个例子来讲,有两台服务器 A、B 现在 A 上的程序想要远程调用 B 上应用提供的函数/方法,就需要通过网络来传输调用所需的消息。
但是消息的网络传输涉及很多东西,例如:
客户端和服务端间 TCP 连接的建立、维持和断开
消息的序列化、编组
消息的网络传输
消息的反序列化
等等
RPC 的作用就是屏蔽网络相关操作,让不在一个内存空间,甚至不在一个机器内的程序可以像调用普通函数一样被调用。
1.3 rest_rpc 优点rest_rpc 有很多的优点:
使用简单
支持订阅模式
允许 future 和 callback 两种异步调用接口,满足不同人群爱好
二、快速开始rest_rpc 依赖 Boost 在使用之前应正确安装 Boost.
2.1 安装通过 git clone 命令将项目下载到本地:
git clone https://github.com/qicosmos/rest_rpc 2.2 目录结构rest_rpc 项目根目录中文件及其意义如表所示:
文件名 作用doc rest_rpc 性能测试报告
examples rest_rpc 例子,包含 client 和 server 两部分
include rest_rpc 框架头文件
third msgpack 支持库,用于用序列化和反序列化消息
2.3 运行例程
rest_rpc 例程为 visual studio 工程,客户端和服务端例程分别存储在 examples/client 和 examples/server 中,直接使用 visual studio 打开 basic_client.vcxproj 或 basic_server.vcxproj 后直接编译即可,官方例程运行效果如图:
注意:项目需要 Boost/asio 支持,如未安装 Boost 需要先正确安装 Boost后将 Boost 添加到工程。
工程中添加 Boost 方法如下:
打开工程后点击菜单栏中的 项目→属性(快捷键 Alt+F7)
选择左边的 VC++ 目录 选项,在右边的 包含目录 和 库目录 中添加 Boost 的 根目录 和 依赖库 后保存
我使用的为 Boost 1.75 安装目录为 D:\devPack\boost_1_75_0,配置过程如图所示:
三、详细教程 3.1 写在前面无论 服务端 还是 客户端 都只用包含 include/rest_rpc.hpp 这一个文件即可。
所有示例代码都是用了如下内容作为框架:
#include <iostream> #include <rest_rpc.hpp> #include <chrono> using namespace rest_rpc; using namespace rest_rpc::rpc_service; int main(){ // do something } 3.2 编写服务端生成一个能提供服务的客户端要经历一下几个过程:
rpc_server 对象的实例化,设置监听端口等属性
服务函数的注册,定义服务端提供哪些服务
服务的启动
1)rpc_serverrpc_server 为 rest_rpc 服务端对象,负责注册服务、发布订阅、线程池管理等服务端基本功能,位于 rest_rpc::rpc_service 命名空间。