48/RADIO-DISH

48/RADIO-DISH

ZeroMQ Radio-Dish

本文档规定了 ZeroMQ Radio-Dish 模式的语义,该模式涵盖了 RADIO 和 DISH 套接字类型。本规范旨在指导这些套接字类型的实现,以便用户能够依赖可靠的语义。

前言

版权所有 (c) 2020 Doron Somech

本规范是自由软件;您可以根据自由软件基金会发布的 GNU 通用公共许可协议(版本 3 或您选择的任何后续版本)的条款重新分发和/或修改它。分发本规范的目的是希望它有用,但没有任何担保;甚至没有对适销性或适合特定用途的默示担保。有关更多详细信息,请参阅 GNU 通用公共许可协议。您应该已经收到了 GNU 通用公共许可协议的副本以及本程序;如果未收到,请参阅 https://gnu.ac.cn/licenses

本规范是一个自由开放标准,并受数字标准组织共识导向规范系统的管辖。

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

目标

本规范旨在正式记录 RADIO-DISH 套接字类型的名称和预期行为,它们共同构成了 ZeroMQ radio-dish 模式。符合本规范的这些套接字实现 SHOULD 遵守本规范,从而确保应用程序能够依赖可预测的行为。本规范不是传输协议特定的,但并非所有行为都能在所有传输协议上重现。

此模式的总体目标

Radio-dish 模式是新系列线程安全套接字中的一员。Radio-dish 模式是 pubsub 模式的线程安全替代品。

该模式旨在用于事件和数据分发,通常是从少量发布者(radios)到大量订阅者(dishes),但也适用于从多个发布者到少量订阅者的情况。

组成员资格检查可以在 RADIO 或 DISH 端进行,取决于传输协议,并在相关文档中定义。对于 TCP,请参阅 https://rfc.zeromq.cn/spec:37/ZMTP

为了使 API 线程安全,发送和接收消息 MUST 是原子的,并且是一个单独的 API 调用来接收或发送整个消息。因此,radio-dish 模式(以及其他线程安全系列)MUST NOT 允许多部分消息。

RADIO 套接字类型

RADIO 套接字类型提供对一组 dish 的基本单向广播。通过 TCP,它会对出站消息进行过滤,但无论如何,一条消息将通过网络多次发送以到达多个 dish。RADIO 主要用于瞬态事件分发,在这种情况下,网络稳定性(例如,持续较低的内存使用率)比流量可靠性更重要。

通用行为

  • MAY 连接到任意数量的 DISH 套接字,并且 SHALL 仅发送消息。
  • SHALL 为每个连接的套接字维护一个出站消息队列。
  • SHALL 在发起与套接字的出站连接时创建一个队列,并且 SHALL 无论连接是否建立都维护该队列。
  • SHALL 在套接字连接到它时创建一个队列。如果此套接字断开连接,RADIO 套接字 SHALL 销毁其队列,并且 SHALL 丢弃其中包含的任何消息。
  • SHOULD 将队列大小限制在运行时可配置的上限。
  • SHALL 静默丢弃 dishes 发送给它的任何消息。
  • MUST 是线程安全的,并允许从多个线程发送。
  • MUST 允许以线程安全的方式将组附加到消息。

处理出站消息

  • SHALL 不以任何方式修改出站消息。
  • MAY,取决于传输协议,将所有消息发送给所有 dishes。
  • MAY,取决于传输协议,仅将消息发送给已加入该消息组的 dishes。
  • SHALL 使用精确匹配算法执行组成员资格检查。
  • 如果某个 dish 的队列已满,SHALL 静默丢弃该消息。
  • SHALL NOT 在发送时阻塞。

处理命令

  • SHALL 根据使用的传输协议从 dishes 接收加入和离开命令。
  • SHALL NOT 将这些命令传递给其调用应用程序。

DISH 套接字类型

DISH 套接字类型提供一组 radio 的基本单向监听器。

通用行为

  • MAY 连接到任意数量的 RADIO 套接字,并且 SHALL 仅接收消息。(注:原文此处误写为“DISH 套接字”,根据上下文应为“RADIO 套接字”)
  • SHALL 为每个连接的 radio 维护一个入站消息队列。
  • SHALL 在发起与 radio 的出站连接时创建一个队列,并且 SHALL 无论连接是否建立都维护该队列。
  • SHALL 在 radio 连接到它时创建一个队列。如果此 radio 断开连接,DISH 套接字 SHALL 销毁其队列,并且 SHALL 丢弃其中包含的任何消息。
  • SHOULD 将队列大小限制在运行时可配置的上限。
  • MUST 是线程安全的,并允许从多个线程接收。
  • MUST 允许以线程安全的方式检索消息的组。

处理入站消息

  • 如果某个 radio 的队列已满,SHALL 静默丢弃消息。
  • SHALL 使用公平排队策略从其套接字接收入站消息。
  • SHALL 不以任何方式修改入站消息。
  • MAY,取决于传输协议,根据组成员资格使用精确匹配算法过滤消息。
  • SHALL 将组附加到消息。
  • SHALL 将消息传递给其调用应用程序。

处理命令

  • MAY 根据使用的传输协议向 radios 发送加入和离开命令。

  • 长度 MUST 介于 0 到 255 字节之间。
  • 组字符 MUST 是一个字节,允许的值为 1-255。
group = 0*255group-char 
group-char = %d1-255

安全方面

本规范没有安全方面。