MQTT

维度 WebSocket MQTT 对IM场景的影响与分析
1. 协议本质 底层双向通信管道 应用层发布-订阅消息协议 灵活性 vs 开箱即用:WS需自定消息格式(如JSON/Protobuf);MQTT提供了现成的消息模式。
2. 通信模型 灵活。可实现点对点、广播、由服务器逻辑路由。 严格的发布-订阅(Pub/Sub)。基于主题(Topic)进行消息路由。 MQTT天然适合群聊/聊天室。单聊需为每个用户设计唯一主题(如/user/{user_id}/inbox)。WS则需在服务端维护复杂的“连接-用户”映射关系。
3. 消息推送 需自行实现。服务器必须知晓哪个连接对应哪个用户,才能推送消息。 原生支持。Broker的核心职责就是根据主题将消息推送给所有订阅者。 MQTT大幅简化后端开发。Broker接管了最复杂的消息路由和推送逻辑,开发者只需关注业务。
4. QoS(服务质量) 无内置支持。需在应用层自行实现消息确认、重传、去重等机制。 核心优势。提供三个级别: 0:最多一次(发完即忘) 1:至少一次(需确认,可能重复) 2:确保只有一次(四次握手,最可靠) MQTT的QoS是巨大优势。对于“已读回执”、“支付通知”等重要消息,可直接使用QoS 1或2,保证了通信的可靠性,无需重复造轮子。
5. 离线与持久化 无内置支持。需自行实现消息暂存、离线管理、连接恢复后推送的逻辑。 通过“持久会话”原生支持。客户端断开后,Broker可为它保存消息,待其重连后再次发送。 MQTT极大降低了离线消息的开发复杂度。这是IM的核心功能,MQTT直接提供,而用WS实现则需要大量工作。
6. 协议开销 低。数据帧头很小(2-14字节)。 极低。设计极其精简,固定头部最小仅2字节。 两者都非常高效,适合高频、低延迟的IM场景。MQTT在极端弱网环境下因其极简设计而略有优势。
7. 生态与平台支持 W3C标准,所有现代浏览器原生支持。后端库(如Node.js的ws)非常成熟。 不是浏览器标准,需引入JS库(如Paho、MQTT.js)。在物联网、移动端(Android/iOS)和嵌入式设备生态中占统治地位。 WS在Web端有绝对优势。若你的IM用户主要在浏览器中,WS是首选。若涉及App、IoT设备等多端,MQTT的跨平台一致性体验更佳
8. 连接保活与状态 需通过应用层心跳(Ping/Pong)维持连接和检测存活。 内置心跳机制(Keep Alive),客户端和Broker自动维护,连接状态清晰。 MQTT更省心,减少了应用层代码量。