51/P2P
ZeroMQ 对等模式
- 状态:草案
- 编辑:Doron Somech somdoron@gmail.com
本文档指定了 ZeroMQ 对等模式(涵盖 PEER 套接字类型)的语义。本规范旨在指导这些套接字类型的实现,以便用户能够依赖可靠的语义。
前言
版权所有 (c) 2020 Doron Somech。
本规范是自由软件;您可以根据自由软件基金会发布的 GNU 通用公共许可证(版本 3 或您选择的任何更高版本)的条款重新分发和/或修改它。本规范的发布是希望它会有用,但 WITHOUT ANY WARRANTY(没有任何担保);甚至不包含适销性或特定用途适用性的默示担保。有关更多详细信息,请参阅 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 中的描述进行解释。
目标
本规范旨在正式记录 PEER 套接字类型的名称和预期行为,这些构成了 ZeroMQ 对等模式。符合本规范的这些套接字实现 SHOULD 遵循本规范,从而确保应用程序可以依赖可预测的行为。本规范不依赖于特定的传输协议,但并非所有行为都能在所有传输协议上重现。
此模式的总体目标
对等模式是线程安全套接字新家族的成员。它是 router-router 模式的线程安全替代方案。对等模式适用于各种类型的对等架构,并且是异步的。
为了使 API 线程安全,发送和接收消息 MUST 是原子的,并且接收或发送整个消息只需一个 API 调用。因此,对等模式(以及其他线程安全家族成员)MUST NOT 允许分段消息 (multipart messages)。
PEER 套接字类型
PEER 套接字类型与零个或多个 PEER 对等方通信,使用显式的路由 ID,以便每条传出消息发送到特定的 PEER 对等方。
一般行为
- MAY 连接到任意数量的 PEER 对等方。
- MAY 以任意顺序发送和接收消息。
- SHALL 不以任何方式过滤或修改传出或传入消息。
- SHALL 为每个连接的对等方维护一个双队列 (double queue),允许传出和传入消息独立排队。
- SHALL 在启动对等方的传出连接时创建一个双队列,并且 SHALL 无论连接是否建立都维护该双队列。
- SHALL 在对等方连接到它时创建一个双队列。如果此对等方断开连接,PEER 套接字 SHALL 销毁其双队列,并且 SHALL 丢弃其中包含的任何消息。
- SHALL 使用唯一的“路由 ID”标识每个双队列,该路由 ID 是一个非零的 32 位无符号整数值。
- SHALL 向应用程序提供一个 API,用于以原子方式连接和检索双队列的“路由 ID”。
- SHALL NOT 允许对等方显式指定其路由 ID。
- SHOULD 将传入和传出队列的大小限制为运行时可配置的限制。
处理传入消息
- SHALL 使用公平队列策略 (fair-queuing strategy) 从其对等方接收传入消息。
- SHALL 将结果消息传递给其调用应用程序。
- SHALL 向应用程序提供一个 API,用于检索消息的路由 ID。
- MUST 丢弃分段消息的任何部分。
- MAY 断开正在发送分段消息的对等方。
处理传出消息
- SHALL 向应用程序提供一个 API,用于设置消息的路由 ID。
- SHALL 将消息路由到传出队列,如果该队列存在且未满。
- 如果队列不存在,SHALL 返回错误。
- 如果队列已满,SHALL 在发送时阻塞,除非另行配置。
- SHALL NOT 丢弃它无法排队的消息。
- MUST NOT 发送分段消息。
安全方面
本规范没有安全方面。