前言
RPC简介
RPC(Remote Procedure Call)是一种使程序能够像调用本地函数一样调用远程服务的方法。它屏蔽了底层的通信细节,使得开发人员无需关注远程调用的复杂性,只需像操作本地方法一样调用远程方法。
参考资料
项目仓库
https://github.com/YVollerei/RPC
项目概述
框架流程图

代码调用流程

三个主体
-
zookeeper服务端
- zooKeeper在这里作为服务方法的管理配置中心,负责管理服务方法提供者对外提供的服务方法
- Rpc服务端与客户端的身份都是zookeeper客户端
- zookeeper存储服务对象与服务方法的方式:

-
Rpc服务端
- Rpc服务端需要向zookeeper注册服务对象与服务方法,注册的内容是本机上提供该服务的ip+端口
- 注册完服务后,启动epoll监听客户端的远端调用请求
- 接收到Rpc客户端的远端调用后,先对调用参数进行反序列化,再调用本地方法处理该调用,最后将处理结果包装为响应,序列化后发出
-
Rpc客户端
- Rpc客户端需要先从zookeeper中查询提供目标服务的Rpc服务端ip与端口
- 查询到Rpc服务端的ip与端口向目标端口发起连接,之后就是send - recv的流程,区别是send前需要对请求内容进行序列化,recv后需要对响应内容进行反序列化
Protobuf
定义了两个proto文件
Krpcheader.proto