50/MME
ZeroMQ 多部分消息编码
- 状态:草案
- 编辑:Gudmundur F. Adalsteinsson ofpgummi@yahoo.com
本文档规定了将多个 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 消息内容编码和解码为单个消息的线缆协议。这正式化了 czmq
中 zmsg_encode
和 zmsg_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 的消息部分,这对于大多数用户来说已足够。如果必须编码大于此大小的数据,则必须拆分消息部分。
安全方面
本规范没有安全方面。