JsonRpc框架介绍和环境搭建
JsonRpc框架C++
1.项目介绍
RPC(Remote Procedure Call)远程过程调用,是⼀种通过网络从远程计算机上请求服务,而不需要了解底层网络通信细节。RPC可以使用多种网络协议进行通信,如HTTP、TCP、UDP等,并且在TCP/IP网络四层模型中跨越了传输层和应用层。简言之RPC就是像调用本地方法⼀样调用远程方法。过程可以理解为业务处理、计算任务,更直白的说,就是程序/方法/函数等,就是像调用本地方法⼀样调用远程方法。
一个完整的RPC通信框架,大概包含一下内容:
- 序列化协议
- 通信协议
- 连接复用
- 服务注册
- 服务发现
- 服务订阅和通知
- 负载均衡
- 服务监控
- 同步调用
- 异步调用
我们的项目时基于C++、JsonCpp、muduo网络库实现一个简单易用的Rpc通信框架,即使是不懂网络的开发者也可以很快速的上手,他实现了以下功能:
- 同步调用、异步Callback调用、异步future调用
- 服务注册/发现、服务上线/下线、服务订阅/发布
2.技术选型
序列化和反序列化:
JSON:因为项目中需要使用 JSON 来定义函数参数和返回值,所以项目中直接采用 JSON 进行序列化和反序列化。
网络传输:
直接采用muduo库,学习开发成本较低。原生socket实现难度较大,暂不考虑。
网络传输的参数和返回值如何映射到对应的Rpc接口上:
我们采用更通用的类型,比如 JSON 类型来设计好参数和返回值协议即可。
Rpc的实现方案:
实现一个远程调用接口call,然后通过传入函数名和参数来调用Rpc接口。
3.开发环境
- Linux (Ubuntu-22.04)
- VSCode/Vim
- g++/gdb
- Makefile
4.环境搭建Ubuntu-22.04
我们演示采用~/Json_rpc路径。
安装wget,一般情况下会自带
ubuntu@VM-20-3-ubuntu:~/Json_rpc$sudo apt-get install wget
更换国内软件源
先备份原来的/etc/apt/source.list文件
ubuntu@VM-20-3-ubuntu:~/Json_rpc$
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
添加软件源文件内容,新增以下内容
deb http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse
#添加清华源
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-security main restricted universe multiverse
新增完毕后,更新源
ubuntu@VM-20-3-ubuntu:~/Json_rpc$sudo apt-get update
安装lrzsz传输工具
ubuntu@VM-20-3-ubuntu:~/Json_rpc$sudo apt-get install lrzsz
ubuntu@VM-20-3-ubuntu:~/Json_rpc$rz --version
rz (lrzsz) 0.12.20
安装编译器gcc/g++
ubuntu@VM-20-3-ubuntu:~/Json_rpc$sudo apt-get install gcc g++
安装项目构建工具make
ubuntu@VM-20-3-ubuntu:~/Json_rpc$sudo apt-get install make
安装调试器gdb
ubuntu@VM-20-3-ubuntu:~/Json_rpc$duso apt-get install gdb
安装cmake
ubuntu@VM-20-3-ubuntu:~/Json_rpc$sudo apt-get install cmake
ubuntu@VM-20-3-ubuntu:~/Json_rpc$cmake --version
cmake version 3.22.1
安装jsoncpp
ubuntu@VM-20-3-ubuntu:~/Json_rpc$sudo apt-get install libjsoncpp-dev
安装muduo库
- 下载源码
ubuntu@VM-20-3-ubuntu:~/Json_rpc$git clone https://github.com/chenshuo/muduo.git
由于网络原因可能获取不到完整内容,建议这样
ubuntu@VM-20-3-ubuntu:~/Json_rpc$git clone https://gitee.com/jimmywang16/muduo_zip.git
- 安装依赖环境
ubuntu@VM-20-3-ubuntu:~/Json_rpc$sudo apt-get install libz-dev libboost-all-dev
- 运行脚本编译安装
ubuntu@VM-20-3-ubuntu:~/Json_rpc$cd muduo_zip
ubuntu@VM-20-3-ubuntu:~/Json_rpc/muduo_zip$unzip muduo-master.zip
现在 Json_rpc/muduo_zip 下会存在两个文件:muduo-master.zip、muduo-master
ubuntu@VM-20-3-ubuntu:~/Json_rpc/muduo_zip$cd muduo-master
ubuntu@VM-20-3-ubuntu:~/Json_rpc/muduo_zip/muduo-master$./build.sh
ubuntu@VM-20-3-ubuntu:~/Json_rpc/muduo_zip/muduo-master$./build.sh install
走到这里已经完成,结束后会生成 build 目录
我们看一下文件结构:
ubuntu@VM-20-3-ubuntu:~/Json_rpc/muduo_zip$ls
build muduo-master muduo-master.zip
这个./build.sh install实际上把muduo的头文件和lib库文件放到了muduo-master同级目录下的build目录下的release-install-cpp11文件夹下面了,我们编译程序时指定muduo库的头文件和库文件路径即可。
详细安装muduo网络库教程
