跳到主要内容

Flags

Flags 用于表达少量跨 Message Type 的通用修饰语义。Flags 是掩码,但不是所有 Flag 都允许与所有 Message Type 组合

当前版本 Flags

名称语义适用范围
ACK_REQUIRED接收端需要返回应用层 ACKOperation、Flow 控制消息、部分协议层 Event
NO_RETRY发送端不应自动重试该消息Operation、Flow 控制消息
RECOVERY_RELATED消息属于 NRCP 层恢复流程Recovery、恢复期间重建的 Flow 控制消息

当前版本未定义的 Flag 必须为 0。接收端发现未知 Flag 被置位时,应返回 UNKNOWN_FLAG 或丢弃该消息

不应使用 Flags 表达的语义

以下语义不应放入 Flags:

  • reliablebest_effort,它们属于 QoS 或承载选择;
  • latest_only,它属于 Flow 属性或具体 Flow 语义;
  • Payload Codec,它已经由帧头 payload_codec 表达;
  • Flow QoS 参数,它们来自 Server 授权的 Flow 上下文;
  • 业务操作类型,它们应由 Operation Name 或 Flow Name 表达;

合法组合

Message Type 类别ACK_REQUIREDNO_RETRYRECOVERY_RELATED
ACK禁止禁止可选
ERROR禁止可选可选
Operation可选可选可选
Flow 控制可选可选可选
FLOW_DATA默认禁止,具体 Flow 可覆盖可选可选
Heartbeat禁止禁止禁止
Recovery可选可选必须
协议层 Event可选可选可选

Heartbeat 不使用 ACK_REQUIRED,因为 Pong 已经是 Ping 的响应