经过十多年实战经验积累以及多方共同讨论,新生命团队(https://github.com/newlifex)制订了一种简单而又具有较好扩展性的RPC(Remote Procedure Call)协议。全称:简易远程消息交换协议,简称:SRMP(Simple Remote Messaging Protocol)
SRMP主要定位于以下场景:
协议格式:1 Flag + 1 Sequence + 2 Length + N Payload 1个字节标识位,标识请求、响应、错误、加密、压缩等; 1个字节序列号,用于请求响应包配对; 2个字节数据长度N,小端字节序,指示后续负载数据长度(不包含头部4个字节),解决粘包问题; N个字节负载数据,数据内容完全由业务决定,最大长度65534=64k-1。
负载数据大于等于64k时,数据长度字段填65535(0xFFFF),启用后续4字节扩展长度,最大长度4G(0xFFFFFFFF)。
物联网硬件设备建议直接忽略扩展长度。
偏移 | 1 | 2 | ||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | |||||||||||
0 | 保留 | 单向 | 请求0 | 序列号(0~255) | ||||||||||||||||||||||
2 | 数据长度Length(0~65534) | |||||||||||||||||||||||||
4 | 扩展长度(可选,Length=65535时启用) | |||||||||||||||||||||||||
4/8 | 字节数 项目 1~4 名称长度S S 服务名 1~4 参数长度N N 参数 | 字节数 | 项目 | 1~4 | 名称长度S | S | 服务名 | 1~4 | 参数长度N | N | 参数 | |||||||||||||||
字节数 | 项目 | |||||||||||||||||||||||||
1~4 | 名称长度S | |||||||||||||||||||||||||
S | 服务名 | |||||||||||||||||||||||||
1~4 | 参数长度N | |||||||||||||||||||||||||
N | 参数 |
偏移 | 1 | 2 | ||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | |||||||||||||
0 | 保留 | 错误 | 响应1 | 序列号(0~255) | ||||||||||||||||||||||||
2 | 数据长度Length(0~65534) | |||||||||||||||||||||||||||
4 | 扩展长度(可选,Length=65535时启用) | |||||||||||||||||||||||||||
4/8 | 字节数 项目 1~4 名称长度S S 服务名 4 响应代码 1~4 响应数据N N 响应长度 | 字节数 | 项目 | 1~4 | 名称长度S | S | 服务名 | 4 | 响应代码 | 1~4 | 响应数据N | N | 响应长度 | |||||||||||||||
字节数 | 项目 | |||||||||||||||||||||||||||
1~4 | 名称长度S | |||||||||||||||||||||||||||
S | 服务名 | |||||||||||||||||||||||||||
4 | 响应代码 | |||||||||||||||||||||||||||
1~4 | 响应数据N | |||||||||||||||||||||||||||
N | 响应长度 |
SRMP主要分为请求和响应两种指令。