Flags
Flags 用于表达少量跨 Message Type 的通用修饰语义。Flags 是掩码,但不是所有 Flag 都允许与所有 Message Type 组合
当前版本 Flags
| 名称 | 语义 | 适用范围 |
|---|---|---|
ACK_REQUIRED | 接收端需要返回应用层 ACK | Operation、Flow 控制消息、部分协议层 Event |
NO_RETRY | 发送端不应自动重试该消息 | Operation、Flow 控制消息 |
RECOVERY_RELATED | 消息属于 NRCP 层恢复流程 | Recovery、恢复期间重建的 Flow 控制消息 |
当前版本未定义的 Flag 必须为 0。接收端发现未知 Flag 被置位时,应返回 UNKNOWN_FLAG 或丢弃该消息
不应使用 Flags 表达的语义
以下语义不应放入 Flags:
reliable或best_effort,它们属于 QoS 或承载选择;latest_only,它属于 Flow 属性或具体 Flow 语义;- Payload Codec,它已经由帧头
payload_codec表达; - Flow QoS 参数,它们来自 Server 授权的 Flow 上下文;
- 业务操作类型,它们应由 Operation Name 或 Flow Name 表达;
合法组合
| Message Type 类别 | ACK_REQUIRED | NO_RETRY | RECOVERY_RELATED |
|---|---|---|---|
ACK | 禁止 | 禁止 | 可选 |
ERROR | 禁止 | 可选 | 可选 |
| Operation | 可选 | 可选 | 可选 |
| Flow 控制 | 可选 | 可选 | 可选 |
FLOW_DATA | 默认禁止,具体 Flow 可覆盖 | 可选 | 可选 |
| Heartbeat | 禁止 | 禁止 | 禁止 |
| Recovery | 可选 | 可选 | 必须 |
| 协议层 Event | 可选 | 可选 | 可选 |
Heartbeat 不使用 ACK_REQUIRED,因为 Pong 已经是 Ping 的响应