C++实现RPC分布式网络通信框架(三)-------RPC通信原理

在项目搭建之前,我们需要将其RPC的通信原理剖析一下,以便我们进行代码模块的分发
在这里插入图片描述
在RPC远程通信框架中由本地用户发起调用,然后经过一系列的操作,该调用请求到达被调用方,而在调用时我们还需要将其调用的方法名和参数打包,毕竟调用的方法不一定是无参的,当被调用方结束调用时,将运行的结果再打包发送回调用方,这就是RPC的整体工作流程,接下来一一说明。

一、caller

发起调用时:

user发起远程调用(local call),user-stub对要调用的方法所需要的参数进行序列化(pack argument),RPC-runtime进行传输(transmit),状态调整至wait,然后等待运行结果的返回。中间的网络业务call packet由muduo库进行;
在这里插入图片描述

获取到被调用方的返回结果时:

RPC-runtime获取到callee发回的数据(receive),由user-stub对结果进行反序列化(unpack result),由user获取其结果(local return)。
在这里插入图片描述

二、callee

收到调用请求后;

由muduo库实现网络业务后,callee收到调用请求。由RPC-runtime模块获取数据包(receive),Server-stub对参数进行反序列化(unpack argument),Server对方法进行调用(call),通过调用(work)获取结果;
在这里插入图片描述

被调用方获取到结果后:

Server对执行结果(正确的执行结果或者错误信息)进行返回(return),由Server-stub对结果序列化(pack result),并传递给RPC-runtime,RPC-runtime对数据进行传输(transmit),同样result packet由muduo库进行网络底层传输。
在这里插入图片描述

三、技术选型

1.序列化和反序列化:由protobuf实现,protobuf存储数据为二进制形式,而json和xml使用文本形式存储,占用空间相对来说比较大,而protobuf不需要存储额外的信息,而且json存储键值对,protobuf直接存储有效数据,protobuf更省空间。
2.网络部分,包括寻找rpc服务主机,发起rpc调用请求和响应rpc调用结果,使用muduo网络库和zookeeper服务配置中心(专门做服务发现)。

因为我们实现的是一个框架类,所以我们只需要实现User/Server-stub以及RPC-runtime的功能部分,对于User和Server则是由用户自己实现,然后学会该框架的具体使用即可。

四、项目工程代码目录

1、bin:可执行文件
2、build:项目编译文件
3、lib:项目库文件
4、src:源文件
5、test:测试代码
6、example:框架代码使用范例
7、CMakeLists.txt:顶层的cmake文件
8、README.md:项目自述文件
9、autobuild.sh:一键编译脚本

后续的博客会对所涉及的技术选型进行一一学习和解释。

猜你喜欢

转载自blog.csdn.net/qq_45132647/article/details/107710963