Operation
Operation 是 NRCP 中用于一次性 Request/Response 交互的协议抽象。一次 Operation 调用称为 Call,由一个 Request 和一个 Response 或 Error 构成
Operation 不表示持续数据流,不使用 channel_id,也不参与 Flow QoS 协商。Operation 使用固定 QoS,默认通过 QUIC Stream 承载
消息关联
| 消息 | message_id | related_id |
|---|---|---|
OPERATION_REQUEST | Request 自己的 ID | 0 |
OPERATION_RESPONSE | Response 自己的 ID | Request 的 message_id |
OPERATION_ERROR | Error 自己的 ID | Request 的 message_id |
Payload
Operation 控制类 Payload 默认使用 JSON。具体 Operation 允许在接口定义章节中覆盖 Payload Codec 和 Schema
Request Payload 字段定义如下:
| 字段 | 必填 | 含义 |
|---|---|---|
operation | 是 | Operation Name |
params | 是 | Operation 参数对象 |
timeout_ms | 否 | 请求超时 |
idempotency_key | 否 | 幂等键 |
Response Payload 字段定义如下:
| 字段 | 必填 | 含义 |
|---|---|---|
operation | 是 | Operation Name |
result | 是 | Operation 结果对象 |
超时与重试
Client 发出 Request 后,应在 Operation 超时时间内等待 Response 或 Error。若超时未收到结果,Client 可将该 Call 标记为失败
Response 晚到时,Client 应通过 related_id 和本地 Call 状态判断是否仍可接受。若 Call 已结束,晚到 Response 应被丢弃或记录为调试信息
是否允许重试由具体 Operation 定义。若 Operation 标记为幂等,Client 允许使用相同 idempotency_key 重试。非幂等 Operation 不应自动重试
取消
当前版本保留 OPERATION_CANCEL,但不要求实现。若具体 Operation 需要取消语义,应在接口定义章节中显式声明