52/CHANNEL
ZeroMQ 通道
- 状态:草稿
- 编辑:Doron Somech somdoron@gmail.com
本文档规定了 ZeroMQ 通道模式的语义,该模式涵盖 CHANNEL 套接字类型。本规范旨在指导此套接字类型的实现,以便用户可以依赖可靠的语义。
前言
版权所有 (c) 2020 Doron Somech。
本规范是自由软件;您可以根据自由软件基金会发布的 GNU 通用公共许可证的条款重新分发和/或修改它;可以是许可证的第 3 版,或者(由您选择)任何更高版本。发布本规范是希望它有所帮助,但不附带任何担保;甚至不包括适销性或特定用途适用性的默示担保。有关更多详细信息,请参阅 GNU 通用公共许可证。您应该已经随本程序收到了一份 GNU 通用公共许可证的副本;如果没有,请参阅 https://gnu.ac.cn/licenses。
本规范是一个 自由开放标准,受数字标准组织 共识导向规范系统 的管辖。
本文档中的关键词“必须”、“不得”、“要求”、“应”、“不应”、“应该”、“不应该”、“推荐”、“可以”和“可选”应按照 RFC 2119 中的描述进行解释。
目标
本规范旨在正式记录 CHANNEL 套接字类型的名称和预期行为,该类型构成 ZeroMQ 通道模式。此套接字类型的兼容实现应该遵守本规范,从而确保应用程序可以依赖可预测的行为。本规范不是特定于传输的,但并非所有行为都可以在所有传输上重现。
此模式的总体目标
通道模式是线程安全套接字新系列中的成员。通道模式是独占对模式的线程安全替代方案。CHANNEL 不是通用套接字,而是用于两个对等方在架构上稳定的特定用例。这通常将 CHANNEL 的使用限制在单个进程内,用于线程间通信。
为了使 API 具有线程安全性,发送和接收消息必须是原子的,并且接收或发送整个消息只需一个 API 调用。因此,客户端-服务器模式(以及线程安全系列中的其他模式)不得允许多部分消息。
CHANNEL 套接字类型
一般行为
- 最多可连接到一个 CHANNEL 对等方。
- 可以按任何顺序发送和接收消息。
- 不应以任何方式过滤或修改出站或入站消息。
- 应为其对等方维护一个双队列,允许出站和入站消息独立排队。
- 在启动到对等方的出站连接时,应创建一个双队列,并且无论连接是否建立,都应维护该双队列。
- 当对等方连接到它时,应创建一个双队列。如果此对等方断开连接,CHANNEL 套接字应销毁其双队列并丢弃其中包含的任何消息。
- 应该将入站和出站队列的大小限制在运行时可配置的限制内。
- 必须是线程安全的,并允许从多个线程接收和发送。
处理出站消息
- 仅当其出站队列未满时,才应将其对等方视为可用。
- 当没有可用对等方时,应在发送时阻塞或返回适当的错误。
- 当没有可用对等方时,不应接受进一步的消息。
- 不应丢弃无法排队的消息。
- 不得发送多部分消息。
处理入站消息
- 如果其有单个对等方,应从该对等方接收入站消息。
- 应将这些消息传递给其调用应用程序。
- 必须丢弃多部分消息的任何部分。
安全方面
本规范没有安全方面的内容。