这是我参与「第五届青训营 」伴学笔记创作活动的第9天
一、什么是RPC
本地函数调用: 1.将a和b的值压栈 2.通过函数指针找到 calculate 函数,进入函数取出栈中的值2和 3,将其赋予x和 y 3.计算x*y,并将结果存在z 4.将z的值压栈,然后从 calculate 返回 5.从栈中取出z 返回值,并赋值给 result
二、一次RPC的完整过程 IDL(Interface description language) 文件 IDL 通过一种中立的方式来描述接口,使得在不同平台上运行的对象和用不同语言编写的程序可以相互通信 Caller Callee 生成代码 通过编译器工具把IDL文件转换成语言对应的静态库 GenCode GenCode 编解码 从内存中表示到字节序列的转换称为编码,反之为解码,也常叫做序列化和反序列化 Encoder 通信协议 Decoder 规范了数据在网络中的传输内容和格式。除必须的请求/响应数据外,通常还会包含额外的元数据 Protocol Transfer Transfer Protocol 网络传输 通常基于成熟的网络库走TCP/UDP传输
三、分层设计 1、语言特定的格式 许多编程语言都内建了将内存对象编码为字节序列的支持,例如 Java 有 java.io.Serializable 文本格式 JSON、XML、CSV等文本格式,具有人类可读性 二进制编码 具备跨语言和高性能等优点,常见有Thrift 的 BinaryProtocol,Protobuf 等 2、网络通信层-网络库 提供易用API 封装底层Socket API 连接管理和事件分发 功能 协议支持:tcp、udp 和uds等 优雅退出、异常处理等 性能 应用层buffer减少copy 高性能定时器、对象池等
四、小结 1.RPC框架主要核心有三层:编解码层、协议层和网络通信层 2.二进制编解码的实现原理和选型要点 3.协议的一般构造,以及框架协议解析的基本流程 4.Socket APl的调用流程,以及选型网络库时要考察的核心指标