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

37 阅读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支持的格式如下:

FormatC TypePython字节数
xpad byteno value1
ccharstr