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 |