Python之RPC开发讲解第3篇:RPC基本原理,二进制消息协议实现

举报
程序员一诺python 发表于 2025/07/28 13:44:39 2025/07/28
【摘要】 客户端 安装 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消息协议
  • 二进制消息协议实现
  • RPC传输控制
  • RPC完整实现
  • RPC服务器

二进制消息协议实现

下面我们来实现一个二进制消息协议的案例,这个案例也是我们后面自己实现RPC通讯案例的一部分。

我们现在实现一个RPC的服务接口定义,这个RPC调用可以完成除法操作。

实现本地调用的话,很容易,定义一个函数divide:

class InvalidOperation(Exception):
    """
    自定义非法操作异常
    """
    def __init__(self, message=None):
        self.message = message or 'invalid operation'

def divide(num1, num2=1):
     """
     除法
     :param num1: int
     :param num2: int, 默认值为1


### struct模块



struct是Python标准库提供的二进制编码解码库,允许我们将各种不同类型的变量转换为bytes字节类型,或者将bytes字节类型转换为其他类型变量。通过struct我们可以方便的操作二进制字节。



#### 1. 将其他类型转换为bytes类型
```python
struct.pack(格式, 数据)

>>> struct.pack('!I', 6)
b'\x00\x00\x00\x06'

!表示适用于网络传输的字节顺序

I表示无符号4字节整数

struct支持的格式如下:

Format C Type Python 字节数
x pad byte no value 1
c char str
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。