一、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)。
物聯網硬件設備建議直接忽略擴展長度。
偏移 | 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 | 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 |
|
三、SRMP遠程調用
SRMP主要分爲請求和響應兩種指令。