【Python使用】Python之RPC开发讲解第2篇:RPC结构,RPC消息协议
【摘要】 客户端 安装 1 安装依赖工具和库 2 安装Thrift编译器和程序库 Thrift的接口定义语言IDL 1 基本类型 2 容器类型 协议与传输选择 1 协议 服务器 Thrift 简介 架构 使用方法 gRPC HTTP/2 1 HTTP/1.x gRPC接口类型 1 Unary RPC 2 Server Streaming RPC Protocol Buffers 1 文档
RPC结构
RPC的设计思想是力图使远程调用中的通讯细节对于使用者透明,调用双方无需关心网络通讯的具体实现。因而实现RPC要进行一定的封装。
RPC原理上是按如下结构流程进行实现的。
图片无法加载
流程:
- 调用者(Caller, 也叫客户端、Client)以本地调用的方式发起调用;
- Client stub(客户端存根,可理解为辅助助手)收到调用后,负责将被调用的方法名、参数等打包编码成特定格式的能进行网络传输的消息体;
- Client stub将消息体通过网络发送给对端(服务端)
- Server stub(服务端存根,同样可理解为辅助助手)收到通过网络接收到消息后按照相应格式进行拆包解码,获取方法名和参数;
- Server stub根据方法名和参数进行本
RPC消息协议
在实现RPC调用时,通讯双方传输的数据(消息)如何表达描述,设计时一般会考虑两个目标:
- 性能高
性能高包括两点:
- 将原始数据转换为消息数据的速度快
-
转换后的消息数据体积小
-
跨语言
RPC调用没有要求调用双方的编程语言必须相同,如果能做到跨语言调用是最好,这会方便产品开发中不同的功能服务以最合适的语言实现,然后使用RPC实现彼此调用。因此RPC调用中传输的消息数据应该尽量能让跟多的语言支持。
本中仅以Python为例进行讲解。
1. 边界
在网络传输中,一方可能连续向另一方多次发送消息,收到数据的一方如何界定数据中包含几条消息,这便是消息边界问题。
考虑TCP传输控制协议,在一条TCP链接中可以多次发送数据,如果发送的数据过大,就会被T
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)