1/SPB

1/SPB

SPB 是一种用于封装不透明二进制数据块的极简格式。这些数据块没有属性,也没有内容结构,它们由一个大小字段后跟数据块内容组成。

许可 (License)

版权所有 (c) 2009 iMatix Corporation

本规范是自由软件;您可以根据自由软件基金会发布的 GNU 通用公共许可证(版本 3 或您选择的任何更高版本)的条款对其进行再分发和/或修改。

分发本规范是希望它会有用,但不附带任何担保;甚至不包括对适销性或特定用途适用性的暗示担保。更多详情请参阅 GNU 通用公共许可证。

您应该已经随本程序收到了 GNU 通用公共许可证的副本;如果未收到,请访问https://gnu.ac.cn/licenses

变更流程 (Change Process)

本规范是自由开放的标准(参见“自由开放标准的定义”),并受数字标准组织(Digital Standards Organization)的共识导向规范系统(COSS)管辖(参见“共识导向规范系统”)。

语言 (Language)

本文档中的关键词“MUST”、“MUST NOT”、“REQUIRED”、“SHALL”、“SHALL NOT”、“SHOULD”、“SHOULD NOT”、“RECOMMENDED”、“MAY”和“OPTIONAL”应按 RFC 2119 中的描述解释(参见“用于 RFC 中表示需求级别的关键词”)。

目标 (Goals)

SPB 旨在成为一种可移植的最佳线路帧封装格式,用于通过诸如 TCP/IP 等流协议传输的不透明数据块。

架构 (Architecture)

一个 SPB 帧由一个帧长度后跟帧数据组成。帧数据的大小必须与帧长度一致。

对于 0 到 254 字节的帧,长度由一个字节表示。

对于 255 或更多字节的帧,长度由一个字节 %xFF 后跟一个 64 位无符号整数长度表示,采用网络字节序。

0                   1                   2                   3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Message size  |                Message body               ... |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Message body ...
+-+-+-+-+-+-+- ...

0                   1                   2                   3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|     0xff      |                Message size               ... |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                        Message size                       ... |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|  Message size |                Message body               ... |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|  Message body ...
+-+-+-+-+-+-+-+ ...

SPB 可以通过以下语法定义

frame   = length data
length  = OCTET | escape 8*OCTET
escape  = %xFF
data    = *OCTET

参考实现 (Reference implementation)

可以在 0MQ 项目中找到 SPB 的参考实现。