外观
MQTT 与 WebSocket,为什么不能当作同一类协议?
标准回答
MQTT 定义了经 Broker 发布、订阅消息的规则;WebSocket 提供双向通信通道,具体业务消息通常要自己约定。MQTT 还可以运行在 WebSocket 上,所以两者可以组合使用。
- QoS 0、1、2 分别对应协议定义的至多一次、至少一次和恰好一次投递语义。
- QoS 不自动等于端到端业务恰好执行一次,仍要设计命令 ID、反馈和持久化边界。
- 遗嘱消息可帮助感知异常离线;保留消息、会话和过期策略要按用途配置,防止旧命令被误执行。
通俗例子
设备把电量发布到 devices/A17/battery,订阅者收到更新;MQTT 的 QoS 1 可能重复投递。如果消息是“执行一次动作”,业务必须按 commandId 去重,不能收到几遍就执行几遍。
深入解释
**Broker 是什么:**Broker 是消息中转服务。设备向某个主题发布消息,Broker 按订阅关系转给其他客户端,发送方无需逐个知道所有接收方地址。
**QoS 为什么不等于动作成功:**QoS 约束协议中的消息投递,设备业务处理是后续动作。即使投递保证更强,仍需 commandId、执行状态和结果反馈,才能判断控制是否完成或重复。
易混淆点
连接还在不代表设备工作正常;危险或有时效的动作不能把旧消息当成新指令。
参考资料
内容来源
- Android · AI Agent 知识手册 · 原条目
job-V04