2/SPB

2/SPB

SPB 是一种用于封装不透明二进制大对象(blob)的极简格式。这些大对象没有属性,没有内容结构,表示为一个大小字段,后跟大对象内容。

许可证

版权所有 (c) 2009-10 iMatix Corporation

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

发布本规范是希望它会有用,但不提供任何担保;甚至不包括适销性或特定用途适用性的默示担保。有关更多详细信息,请参阅 GNU 通用公共许可证。

您应该已随此程序收到一份 GNU 通用公共许可证的副本;如果未收到,请参阅 https://gnu.ac.cn/licenses

变更流程

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

语言

本文档中的关键词“必须”(MUST)、“不得”(MUST NOT)、“必需的”(REQUIRED)、“应”(SHALL)、“不应”(SHALL NOT)、“应该”(SHOULD)、“不应该”(SHOULD NOT)、“推荐的”(RECOMMENDED)、“可以”(MAY)和“可选的”(OPTIONAL)的解释应遵循 RFC 2119 中的描述(参见“RFC 中用于指示需求级别的关键词”)。

目标

SPB 被设计为一种可移植的最优有线帧格式,用于封装通过诸如 TCP/IP 等流式协议传输的不透明数据大对象。

架构

一个 SPB 帧包含一个帧长度、一个扩展点和帧数据。帧数据的大小必须与帧长度相符。

对于 0 到 254 个八位字节(octet)的帧,长度由一个八位字节表示。

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  | Extensions    |  Message body ...             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Message body ...
+-+-+-+-+-+-+-...

对于 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
+-+-+-+-+-+-+-+-+
| 0xff          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-...+-+
| Message size (8 bytes)                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-...+-+
| Extensions    |  Message body ...                             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Message body ...
+-+-+-+-+-+-+-+...

SPB 由此语法定义

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

参考实现

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