30/管道

30/管道

ZeroMQ 管道

本文档规定了 ZeroMQ 管道模式(包括 PUSH 和 PULL 套接字类型)的语义。本规范旨在指导这些套接字类型的实现,以便用户可以依赖可靠的语义。

前言

版权所有 (c) 2013 iMatix Corporation。

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

本规范是 一项自由开放的标准,受数字标准组织 (Digital Standards Organization) 的共识导向规范系统管辖。

本文档中的关键词“MUST”(必须)、“MUST NOT”(不得)、“REQUIRED”(要求)、“SHALL”(应)、“SHALL NOT”(不应)、“SHOULD”(应当)、“SHOULD NOT”(不应当)、“RECOMMENDED”(推荐)、“MAY”(可以)和“OPTIONAL”(可选)应按 RFC 2119 中的说明解释。

目标

本规范旨在正式记录 PUSH 和 PULL 套接字类型的名称和预期行为,它们共同构成了 ZeroMQ 管道模式。符合此规范的套接字实现应当遵守本规范,从而确保应用程序可以依赖可预测的行为。本规范并非针对特定传输方式,但并非所有行为都能在所有传输方式上重现。

此模式的总体目标

此模式旨在用于任务分发,通常用于多阶段管道中,其中一个或少数节点将工作推送到许多工作节点,工作节点再将结果推送到一个或少数收集器。该模式大部分是可靠的,因为它除非节点意外断开连接,否则不会丢弃消息。它是可扩展的,因为节点可以随时加入。

PUSH 套接字类型

PUSH 套接字类型与一组匿名 PULL 对等方通信,使用轮询算法发送消息。

一般行为

  • 可以连接到任意数量的 PULL 对等方,并且只能发送消息。
  • 不得以任何方式过滤或修改出站消息。
  • 应为每个连接的对等方维护一个出站消息队列。
  • 在向对等方发起出站连接时,应创建此队列,并且无论连接是否建立,都应维护该队列。
  • 当对等方连接到它时,应创建此队列。如果此对等方断开连接,PUSH 套接字应销毁其队列,并且应丢弃其中包含的任何消息。
  • 应当将队列大小限制在运行时可配置的阈值内。

处理出站消息

  • 只有当对等方具有未满的出站队列时,才应将其视为可用。
  • 应使用轮询策略将出站消息路由到可用对等方。
  • 当没有可用对等方时,应在发送时阻塞,或返回适当的错误。
  • 当没有可用对等方时,不应接受进一步的消息。
  • 不得丢弃无法加入队列的消息。

PULL 套接字类型

PULL 套接字类型与一组匿名 PUSH 对等方通信,使用公平排队算法接收消息。

一般行为

  • 可以连接到任意数量的 PUSH 对等方,并且只能接收消息。
  • 不得以任何方式过滤或修改入站消息。
  • 应为每个连接的对等方维护一个入站队列。
  • 在向对等方发起出站连接时,应创建此队列,并且无论连接是否建立,都应维护该队列。
  • 当对等方连接到它时,应创建此队列。如果此对等方断开连接,PULL 套接字应销毁其队列,并且应丢弃其中包含的任何消息。
  • 应当将入站队列大小限制在运行时可配置的阈值内。

处理入站消息

  • 应使用公平排队策略接收来自其对等方的入站消息。
  • 应将这些消息传递给其调用应用程序。

安全方面

本规范不涉及安全方面。