简易远程消息交换协议SRMP
一、SRMP目标定位
经过十多年实战经验积累以及多方共同讨论,新生命团队(https://github.com/newlifex)制订了一种简单而又具有较好扩展性的RPC(Remote Procedure Call)协议。
全称:简易远程消息交换协议,简称: SRMP(Simple Remote Messaging Protocol)
SRMP主要定位于以下场景:
- 内网高速通信,大吞吐量(>100万tps)、低延迟(<1ms)
- 外网远程通信,稳定可靠,海量连接(>10万)
- 物联网硬件设备,容易简单实现协议
二、SRMP基础格式
协议格式:
1 Flag + 1 Sequence + 2 Length + N Payload
1个字节标识位,标识请求、响应、错误、加密、压缩等;
1个字节序列号,用于请求响应包配对;
2个字节数据长度N,小端字节序,指示后续负载数据长度(不包含头部4个字节),解决粘包问题;
N个字节负载数据,数据内容完全由业务决定,最大长度65534=64k-1。
负载数据大于等于64k时,数据长度字段填65535(0xFFFF),启用后续4字节扩展长度,最大长度4G(0xFFFFFFFF)。
物联网硬件设备建议直接忽略扩展长度。
字节 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | ||||||
1 | 请求0 | 单向 | 压缩 | 加密 | 保留 | |||||||||
1 | 序列号(0~255) | |||||||||||||
2 | 变长数据长度Length(0~65534) | |||||||||||||
变长 |
|
字节 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | ||||||||
1 | 响应1 | 错误 | 压缩 | 加密 | 保留 | |||||||||||
1 | 序列号(0~255) | |||||||||||||||
2 | 变长数据长度Length(0~65534) | |||||||||||||||
变长 |
|
三、SRMP远程调用
SRMP主要分为请求和响应两种指令。
我不相信神话,我只相信汗水!我不相信命运,我只相信双手!