50/MME

50/MME

ZeroMQ 多部分消息编码

本文档规定了将多个 ZeroMQ 消息编码和解码为单个消息的语义。

前言

版权所有 (c) 2020 Gudmundur F. Adalsteinsson

本规范是自由软件;您可以根据自由软件基金会发布的 GNU 通用公共许可证的条款重新分发和/或修改它;无论是该许可证的第 3 版,还是(由您选择)任何更高版本。分发本规范的目的是希望它有用,但**不提供任何担保**;甚至不提供适销性或特定用途适用性的默示担保。更多详细信息请参阅 GNU 通用公共许可证。您应该已随本程序收到一份 GNU 通用公共许可证的副本;如果未收到,请参阅 https://gnu.ac.cn/licenses

本规范是一项自由开放标准,由数字标准组织 (Digital Standards Organization) 的共识导向规范系统 (Consensus-Oriented Specification System) 管理。

本文档中的关键词 “MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL NOT”, “SHOULD”, “SHOULD NOT”, “RECOMMENDED”, “MAY”, 和 “OPTIONAL” 应按照 RFC 2119 中的描述进行解释。

目标

本规范旨在正式记录将多个 ZeroMQ 消息内容编码和解码为单个消息的线缆协议。这正式化了 czmqzmsg_encodezmsg_decode 使用的协议。

实现

零个或多个消息的序列被序列化为一系列序列化帧。帧是消息部分的内容。

一个大小为 255 或更多字节(大消息)的帧被序列化为一个单字节 0xFF,后跟以网络字节顺序表示的 32 位无符号整数大小,再后跟该帧。一个大小为 254 或更少字节(小消息)的帧被序列化为一个单字节大小,后跟该帧。

  • 编码器 MUST 支持编码零个或多个帧。
  • 解码器 MUST 支持解码零个或多个帧。
  • 零帧计数被编码为大小为 0 的消息。
  • 编码器 MUST 报告超出无符号 32 位整数能容纳的最大值导致的帧大小溢出错误。消息的总大小没有明确规定上限。
  • 解码器 MUST 报告无效编码(下溢或上溢)错误。
  • 实现 MAY 将小于 255 字节(小消息)的消息编码为大消息。

下图显示了长度为 0 到 254 字节的序列化帧的布局

            +----------------+
 Octet 0    | Length         |
            +----------------+- ... ---------------------+
 Octets 1+  | Content                      Length octets |
            +------------------ ... ---------------------+

下图显示了长度为 255 或更多字节的序列化帧的布局

            +----------------+
 Octet 0    | 0xFF           |
            +----------------+- ... ---------------------+
 Octets 1-4 | Length                          4 octets   |
            +------------------ ... ---------------------+
 Octets 5+  | Content                      Length octets |
            +------------------ ... ---------------------+

限制

该协议仅支持大小最大为 4GiB 的消息部分,这对于大多数用户来说已足够。如果必须编码大于此大小的数据,则必须拆分消息部分。

安全方面

本规范没有安全方面。