目录
2. 网络传输的参数和返回值怎么映射到对应的RPC 接口上?
项目汇总:uyeonashi的博客-CSDN博客
一、项目介绍
RPC(Remote Procedure Call)远程过程调用,是一种通过网络从远程计算机上请求服务,而不需要了解底层网络通信细节。RPC可以使用多种网络协议进行通信, 如HTTP、TCP、UDP等, 并且在TCP/IP网络四层模型中跨越了传输层和应用层。简言之RPC就是像调用本地方法一样调用远程方法。
举个栗子:
- 本地调用:我们在家里直接用遥控器打开空调
- 远程调用:我们在外面,想要回到家的时候,家里就很凉快,我们就用手机提前就打开家里的空调,保证到家的时候就非常凉快了
一个完整RPC通信框架,大概包含以下内容:
• 序列化协议
• 通信协议
• 连接复用
• 服务注册
• 服务发现
• 服务订阅和通知
• 负载均衡
• 服务监控
• 同步调用
• 异步调用
项目是基于C++、JsonCpp、muduo网络库实现一个简单、易用的RPC通信框架,即使是不懂网络的开发者也可以很快速的上手,它实现了同步调用、异步callback调用、异步futrue调用、服务注册/发现,服务上线/下线以及发布订阅等功能设计。
二、技术选型
1. RPC的实现方案:
client和server继承公共接口
- 根据IDL(接口描述语言)定义公共接口
- 编写代码生成器根据IDL语言生成相关的C++、Java代码
- 然后我们的客户端和服务器程序共同向上继承公共接口即可
- 实现一个远程调用接口call, 然后通过传入函数名参数来调用RPC接口, 我们采用这种实现方案
举个栗子:
2. 网络传输的参数和返回值怎么映射到对应的RPC 接口上?
使用更通用的类型, 比如JSON类型, 设计好参数和返回值协议即可
3. 网络传输怎么做?
使用muduo库, 学习开发成本较低
4. 序列化和反序列化?
JSON: 因为项目需要使用JSON来定义函数参数和返回值, 所以本项目中直接采用JSON进行序列化和反序列化
三、开发环境
• Linux(Ubuntu-22.04 / Centos-7.6 )
• VSCode/Vim
• gcc/g++/gdb
• Makefile
四、环境搭建
Ubuntu-22.04 环境搭建
安装wget
sudo apt-get install wget
更换国内软件源
国外的软件源可能比较慢,所以我们可以更新国内的软件源
先备份原来的/etc/apt/source.list文件
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
新增完毕后,更新
sudo apt-get update
安装lrzsz传输工具
sudo apt-get install lrzsz
//rz --version
//rz (lrzsz) 0.12.20
安装编译器gcc/g++
sudo apt-get install gcc g++
安装项目构建工具make
sudo apt-get install make
安装调试器gdb
sudo apt-get install gdb
安装git
sudo apt-get install git
安装cmake
sudo apt-get install cmake
安装jsoncpp
sudo apt-get install libjsoncpp-dev
安装Muduo
- 下载源码
//git 方式 git clone https://github.com/chenshuo/muduo.git //或者博主的gitee中的third中的压缩包 git clone https://gitee.com/uyeonashi/project.git
- 安装依赖环境
sudo apt-get install libz-dev libboost-all-dev
- 运行脚本编译安装
unzip muduo-master.zip ./build.sh ./build.sh install
本篇完,下篇继续!如果有问题可在评论区指出!