MQTT 笔记
介绍
MQTT stands for MQ Telemetry Transport. It is a publish/subscribe, extremely simple and lightweight messaging protocol, designed for constrained devices and low-bandwidth, high-latency or unreliable networks. The design principles are to minimise network bandwidth and device resource requirements whilst also attempting to ensure reliability and some degree of assurance of delivery. These principles also turn out to make the protocol ideal of the emerging “machine-to-machine” (M2M) or “Internet of Things” world of connected devices, and for mobile applications where bandwidth and battery power are at a premium.
MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)是一个 C/S 架构的发布/订阅模式的消息传输协议。它的设计思想是轻巧、开放、简单、规范、易于实现。可以把所有联网物品和外部连接起来,特别适用于受限的环境,如机器与机器(M2M)以及物联网环境(IoT)。
协议特点包括:
- 使用发布/订阅消息模式,提供一对多消息分发,接触应用之间耦合
- 对负载内容屏蔽的消息传输
- 使用 TCP/IP 提供基础网络连接
- 有三种级别(QoS0:最多分发一次、QoS1:至少达到一次、QoS2:仅分发一次)的消息传递服务
- 小型传输,开销很小(固定长度的头部2字节),协议交换最小化,以降低网络流量
cleanSession
cleanSession 标志是 MQTT 协议中对一个客户端建立 TCP 连接后是否关心之前状态的定义。具体语义如下:
cleanSession=true:客户端再次上线时,将不再关心之前所有的订阅关系以及离线消息。
cleanSession=false:客户端再次上线时,还需要处理之前的离线消息,而之前的订阅关系也会持续生效。
注意:
MQTT 要求每个客户端每次连接时的 cleanSession 标志必须固定,不允许动态变化,否则会导致离线消息的判断有误。
MQTT 目前对外 QoS2 消息不支持非 cleanSession ,如果客户端以 QoS2 方式订阅消息,即使设置 cleanSession=false 也不会生效。
P2P 消息的 cleanSession 判断以发送方客户端的配置为准。
表格比较
通配符
- #:表示匹配 >=0 个层次,比如 a/#, a/, a/b, a/b/c。单独的一个#表示匹配所有。
- +:表示匹配一个层次,比如a/+, a/c, 不匹配 a/b/c。单独的一个+是允许的。
注意:通配符只可用在主题过滤器中,在发布消息时,主题名字中不允许包含通配符。
iOS建议使用 novastone-media/MQTT-Client-Framework 类库
FQA
如何处理网络断开、上线和下线情况
1、网络断开,自动断开,无需处理。上线和下线调用API方法。
MQTT iOS 类库
- novastone-media/MQTT-Client-Framework
- emqtt/CocoaMQTT
- mobile-web-messaging/MQTTKit
- aciidb0mb3r/SwiftMQTT
- flightonary/Moscapsule
参考链接
文档信息
- 版权声明:自由转载-保持署名-非商用-非衍生 ( CC BY-NC-ND 4.0 )