简易远程消息交换协议SRMP

一、SRMP目标定位

经过十多年实战经验积累以及多方共同讨论,新生命团队(https://github.com/newlifex)制订了一种简单而又具有较好扩展性的RPC(Remote Procedure Call)协议。全称:简易远程消息交换协议,简称:SRMP(Simple Remote Messaging Protocol)

SRMP主要定位于以下场景:

  1. 内网高速通信,大吞吐量(>100万tps)、低延迟(<1ms)
  2. 外网远程通信,稳定可靠,海量连接(>10万)
  3. 物联网硬件设备,容易简单实现协议

二、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远程调用

SRMP主要分为请求和响应两种指令。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏C++

python笔记:#002#第一个python程序

13440
来自专栏蓝天

redis的一些简介

Redis是Remote Dictionary Server的缩写,他本质上一个Key/Value数据库,与Memcached类似的NoSQL型数据库。

11810
来自专栏企鹅号快讯

UNIX 高手的 10 个习惯

Unix运维工程师看过来:10个能够提高您的 UNIX 命令行效率的好习惯——并在此过程中摆脱不良的使用模式。本文循序渐进地指导您学习几项用于命令行操作的技术,...

19890
来自专栏技术小讲堂

WCF中操作的分界于调用顺序和会话的释放操作分界实例停止

操作分界 在WCF操作契约的设计中,有时会有一些调用顺序的业务,有的操作不能最先调用,有的操作必须最后调用,比如在从一个箱子里拿出一件东西的时候,必须先要执行打...

34360
来自专栏容器云生态

运维工作常用的shell命令

#seq 1 100    //1到100排序 #seq 1 3 100   //1到100排序,间隔为3 shell中的变量设置规则: 1.变量与变量的内容用...

23360
来自专栏流柯技术学院

jstack+top定位性能问题

定位性能问题,尤其是cpu使用率过高时,经常需要查找cpu消耗较高的线程,然后查看其堆栈,从而进入代码定位问题。    

39620
来自专栏Albert陈凯

2018-08-02 IntelliJ IDEA - Debug 调试多线程程序IntelliJ IDEA - Debug 调试多线程程序

https://blog.csdn.net/nextyu/article/details/79039566

23420
来自专栏熊二哥

快速入门系列--CLR--02多线程

最近,由于基础框架的整体升级,因此需要更新所有相关项目的DLL文件。这个过程存在不小的风险,因此也对发布后的生产服务器进行了密切的监控,结果还是出现了个别应用出...

19490
来自专栏地方网络工作室的专栏

Python3 初学实践案例(6)终极 CLI 密码生成程序实现

Python3 初学实践案例(6)终极 CLI 密码生成程序实现 在前面一章的学习中,我已经完成了一个一定扔出 6 的生成密码算法实现。但是只能将生成的密码输出...

21180
来自专栏Java帮帮-微信公众号-技术文章全总结

【大牛经验】Java9的新特性

Java 9 包含了丰富的特性集。虽然Java 9没有新的语言概念,但是有开发者感兴趣的新的API和诊断命令。 我们将快速的,着重的浏览其中的几个新特性: ? ...

38080

扫码关注云+社区

领取腾讯云代金券