MQTT协议(Message Queuing Telemetry Transport,消息队列遥测传输协议)是一种轻量级的、发布/订阅网络协议,它被设计用来传输小消息到远距离的网络客户端和服务器之间。MQTT协议广泛应用于物联网(IoT)中,尤其是在那些带宽有限、网络条件不佳或设备能力受限的环境下。
MQTT的基本架构是客户端-服务器模式,由一个中心化的MQTT代理(Broker)和多个连接的客户端构成。它支持三种服务质量(Quality of Service,QoS)等级:
- QoS 0:最多一次传递,消息发布后,代理不会发送确认或重发消息。
- QoS 1:至少一次传递,代理会确认收到消息,如果消息丢失,会重新发送。
- QoS 2:只有一次传递,代理会确认收到消息,并且确保消息只被传递一次,不会重复。
MQTT协议包含多个控制报文,用于客户端与代理之间的通信,包括:
1. CONNECT:客户端发送CONNECT报文以连接到代理服务器。
2. CONNACK:代理用CONNACK报文确认CONNECT请求。
3. PUBLISH:客户端发布一个消息。
4. PUBACK:发布确认,QoS 1消息传输的第二部分。
5. PUBREC:发布收到,QoS 2消息传输的第一部分。
6. PUBREL:发布释放,QoS 2消息传输的第二部分。
7. PUBCOMP:发布完成,QoS 2消息传输的第三部分。
8. SUBSCRIBE:客户端发送SUBSCRIBE报文以订阅一个或多个主题。
9. SUBACK:代理用SUBACK报文确认SUBSCRIBE请求。
10. UNSUBSCRIBE:客户端发送UNSUBSCRIBE报文以取消订阅一个或多个主题。
11. UNSUBACK:代理用UNSUBACK报文确认UNSUBSCRIBE请求。
12. PINGREQ:客户端发送PINGREQ报文以检查代理是否可用。
13. PINGRESP:代理用PINGRESP报文响应PINGREQ请求。
14. DISCONNECT:客户端或代理发送DISCONNECT报文以断开连接。
在操作行为方面,MQTT定义了多种消息处理行为,确保消息能够准确地从发布者传送到订阅者。此外,安全章节讲解了如何保护MQTT通信,包括使用TLS/SSL等加密技术保障数据传输的安全。第六章介绍了如何将MQTT协议与WebSocket结合,这使得它可以在不直接支持TCP/IP的应用层协议中使用,如Web浏览器。
文档还提到了一致性目标,指的是MQTT协议的规范定义和实现需要保持一致性,以保证不同客户端和代理之间的互操作性。
文档中还包含了发布信息和联系方式,例如博客地址、GitHub仓库、开源项目等资源,其中mcxiaoke是该项目的主要贡献者之一。文档中还提到了一些与MQTT相关的开源项目和工具,如Rx文档中文翻译、Awesome-Kotlin等,这些资源为使用MQTT协议的开发者提供了辅助。
值得注意的是,文档的翻译者通过使用Markdown格式,使得文档更容易在线分章节浏览。文档的GitBook版本与旧版文档的内容进行对照,读者可以阅读到最新版的内容。文档中还提到了许可协议,即文档遵循“署名-非商业性使用-相同方式共享”的Creative Commons协议,即CC BY-NC-SA。
在实际应用中,嵌入式开发人员可以利用MQTT协议在资源有限的设备(如传感器、嵌入式设备)之间实现稳定可靠的消息传递。而Linux作为一个普遍使用的操作系统,其上的客户端可以利用MQTT协议与服务器或其他客户端通信。随着物联网的快速发展,MQTT因其轻量级、低开销、易实现的特性,成为了连接物联网设备与后端服务的首选协议之一。