MQTT
一种带有 Broker 路由、主题、消息级别、保留消息、会话状态和设备友好客户端的应用消息协议。
最适合多对多的物联网事件、遥测、状态和命令。
协议对比
MQTT 定义了发布/订阅主题、QoS、会话、保留状态和 Broker 行为。WebSocket 创建了一个持久的全双工通道。它们在简单的实时应用中可能相互竞争,但 MQTT 也可以运行在 WebSocket 之上。
WebSocket 解决了字节如何在持久连接上传输的问题。MQTT 也定义了消息系统如何处理这些字节。
MQTT
一种带有 Broker 路由、主题、消息级别、保留消息、会话状态和设备友好客户端的应用消息协议。
最适合多对多的物联网事件、遥测、状态和命令。
WebSocket
客户端和服务器之间持久的双向传输通道。消息的含义、路由、授权、重放和确认属于应用层定义。
最适用于自定义的浏览器到服务器实时体验。
| 能力 | MQTT | WebSocket |
|---|---|---|
| 主要角色 | 应用消息协议 | 持久全双工通信通道 |
| 拓扑结构 | 由 Broker 协调的多个发布者和订阅者 | 一个客户端连接到一个服务器端点 |
| 路由机制 | 内置的层级主题和通配符订阅 | 应用定义的事件、房间、通道或处理器 |
| 消息投递行为 | QoS 0、1 和 2,外加保留消息和会话队列 | 连接上的有序帧;应用层负责确认和恢复 |
| 浏览器支持 | 在浏览器中使用 MQTT over WebSocket | 基于 ws 或 wss 的原生浏览器 API |
| 访问控制 | 客户端身份、发布和订阅主题策略 | 应用会话和自定义消息授权 |
当产品真正需要主题、扇出(fan-out)、离线行为和设备身份时,应避免在 WebSocket 处理器内部重建 Broker 语义。
浏览器使用 WebSocket 作为传输层,而 MQTT 仍然是应用协议和 Broker 契约。
不是。MQTT 定义了应用层消息语义。WebSocket 提供了一个持久的双向通道。MQTT 可以使用 WebSocket 作为其传输层之一。
浏览器无法打开任意的原始 TCP 套接字,因此浏览器 MQTT 客户端通常需要通过 Broker 的 WebSocket 或安全 WebSocket 监听器连接。
直接帧的协议开销可能更小,但有用的系统还必须实现路由、投递、恢复和授权。应衡量完整的应用路径,而不仅仅是帧开销。
比较数据平台边界,然后实现和保护 MQTT 连接。