Files
web-Iot/docs/控制会话状态机.md
2026-08-10 13:33:06 +08:00

4.7 KiB
Raw Permalink Blame History

控制会话状态机

项目 内容
文档编号 DES-04
文档名称 控制会话状态机
版本 V1.0
状态 已评审(Reviewed)
适用系统 机器人智慧服务系统(控制链路:WebSocket 控制通道)
编写日期 2026-08-10
关联文档 DOC-09 控制命令字典、命令状态机、越权-冲突-超时测试记录

1. 概述

控制会话(Control Session)描述 操作员 ↔ 设备 之间的实时控制连接生命周期。会话是"命令下发"的前置条件:只有会话处于 ESTABLISHED 状态时,才允许下发互斥类控制命令(move/rotate/task_start 等)。

2. 会话状态定义(CS-STATE)

状态 编码 说明
空闲 IDLE 无会话,设备未被任何操作员控制
连接中 CONNECTING 客户端发起 AUTH 握手,等待设备确认
已建立 ESTABLISHED 握手完成,操作员持有控制权,可下发命令
忙 BUSY 会话建立但设备正在执行互斥命令(命令状态机 EXECUTING)
挂起 SUSPENDED 网络抖动/设备暂时不可控,会话保留待恢复
已关闭 CLOSED 会话终止(超时/主动断开/被抢占),控制权释放

3. 状态迁移图

        AUTH 握手成功
IDLE ────────────────→ ESTABLISHED
  ↑                      │  │
  │ 释放/超时            │  │ 下发互斥命令
  │                      │  ▼
CLOSED ←── 超时/抢占 ── BUSY
  ↑                      │
  │ 主动断开/设备离线     │ 命令完成(SUCCEEDED/FAILED/TIMEOUT)
  └──────────────────────┴──────────────→ ESTABLISHED

ESTABLISHED ── 网络抖动/设备忙 ──→ SUSPENDED ── 恢复/超时 ──→ ESTABLISHED / CLOSED

4. 状态迁移表(CS-TRANSITION)

当前状态 事件 目标状态 条件 / 动作
IDLE AUTH_REQ CONNECTING 客户端发送 AUTH 包 {type:'AUTH', token, userName, deviceId}
CONNECTING AUTH_OK ESTABLISHED 设备确认;记录 owner、sessionId,启动保活计时
CONNECTING AUTH_FAIL IDLE token 无效/越权 → 拒绝连接,记审计日志
CONNECTING TIMEOUT IDLE 握手超时(5s 无 AUTH_OK)
ESTABLISHED CMD_DISPATCH BUSY 下发互斥命令成功(move/rotate/task_start)
BUSY CMD_FINISH ESTABLISHED 命令进入终态(SUCCEEDED/FAILED/TIMEOUT)
ESTABLISHED/BUSY LINK_DEGRADE SUSPENDED 网络 RTT 超阈值/设备无响应;暂停命令下发
SUSPENDED LINK_RECOVER ESTABLISHED 链路恢复,继续未完成任务
SUSPENDED RESUME_TIMEOUT CLOSED 挂起超时(30s)未恢复 → 释放控制权
任意非终态 CLOSE CLOSED 操作员主动释放 / 设备离线 / 被抢占
CLOSED REOPEN CONNECTING 重新申请控制权

5. 会话互斥与抢占(CS-MUTEX)

规则编号 规则 说明
CS-M1 一机一会话 同一设备同时仅允许 1 个 ESTABLISHED 会话
CS-M2 抢占需授权 新操作员申请控制权时,若已有会话:仅 admin 可强制抢占,原会话收到 PRECEDED 后关闭;普通用户收到 403 设备被占用
CS-M3 会话与命令联动 会话 CLOSED 时,该设备 PENDING/SENT 命令自动取消(CANCELLED)
CS-M4 会话保活 客户端每 10s 发送保活帧;30s 无帧 → 判定链路断开,SUSPENDED→CLOSED

6. 会话对象字段(CS-OBJECT)

字段 类型 说明
sessionId string UUID,会话唯一标识
deviceId string 目标设备
owner string 持有控制权的操作员账号
role enum admin / operator / viewer
state enum 见 §2
currentCommandId string 当前执行中命令(BUSY 时非空)
createdAt / updatedAt datetime 会话时间戳
closedReason enum user_close / timeout / preempted / device_offline / auth_fail

7. 与命令状态机的衔接

会话 ESTABLISHED + 下发 move ──→ 命令状态机: SENT → ACKED → EXECUTING(会话→BUSY)
命令 SUCCEEDED/FAILED/TIMEOUT ──→ 会话 BUSY→ESTABLISHED
会话 CLOSED ──→ 未终态命令 → CANCELLED

变更记录

版本 日期 变更内容 作者
V1.0 2026-08-10 初稿:会话状态/迁移表/互斥抢占规则 系统组