MQTT 连接与用户会话订阅

验证状态:存在关键缺口,不可作为完整契约发布;适用基线:源码归纳 @ 2026-09-14

用途与场景

建立 Web/App 与 MQTT Broker 的会话并订阅当前用户的会话主题。登录进入空间布局时连接、卸载时断开;本连接是实时监看、对讲、回放、远控等全部 MQTT 操作的传输前提。连接与订阅模型、凭据构造的单一正本即本页;Broker 地址、TLS 与 ACL 的公共约定见 MQTT 连接与消息边界

使用位置

页面/功能 角色或空间分支
空间布局连接 + 订阅 + 消息分发 全局实时入口(机构/个人/管理员)

端点

MQTT CONNECT + SUBSCRIBE(Web ↔ Broker 直连,不经中心 Java 服务)— 建立用户会话并订阅 user/{username}/web/{sessionId}/#,是全部用户侧 MQTT 操作的传输前提。

会话形态:clientId user,{username},web,{sessionId}(逗号四段),用户名 user-{username}、密码为其 WASM 计算值;sessionId 为客户端生成的 17 位时间串,不在登录响应中,重开页面即新会话。中心侧的 MQTT 网关订阅面与凭据供给链(公共/设备账号同步)见 MQTT 主题清单 · 服务端订阅面设备业务 · mqtt-bridge 设备消息链;Broker 地址、TLS 与 ACL 公共约定见MQTT 连接与消息边界

动线与完成判据

connect 事件后订阅回调无 err、全局 mqttClient 可用,即会话就绪;发布 Promise 完成只代表 Broker 发布调用成功(QoS 不推出业务必达,见 MQTT 连接与消息边界)。断线重连为 mqtt.js 自动行为(5 秒间隔),会话无服务端恢复语义(clean=true)。

错误与边界

连接失败/超时由 mqtt.js 按 reconnectPeriod 自动重试;订阅失败仅记日志且不发布全局 client(fail-closed)。登出(退出登录)不清订阅——连接随页面跳转卸载而断开。QoS、重连与超时的既有约定见公共约定页。

调用关系与资源清理

全部 MQTT 操作(设备远控、监看、对讲、回放、运维上传指令)以本会话为传输前提;会话资源在布局卸载时 end 释放。

已知缺口

关键缺口(页面按传输会话正本 + 缺口说明发布):

  • user-{username} MQTT 账号的供给方与 Broker 校验机制缺证(中心侧仅有公共/设备账号同步;Web 密码在 WASM 内部计算,不可读源码);
  • Broker ACL 对 user/{username}/web/{sessionId}/# 的最终授权、TLS 终止与部署一致性缺证(补证责任源:EMQX/部署配置与联调);
  • 默认 ACL user/# = all(共享账号视角)与按用户隔离的预期不一致,隔离强度未评估。