作者:Roger Light
<[roger@atchoo.org](mailto:roger@atchoo.org)>
译者:penghuster
名字
mqtt — MQ Telemetry Transport(消息队列遥感传输)
Synopsis(概要)
MQTT
描述
MQTT 是一个轻量级的 发布/订阅消息协议。它可以很好的用于低电量传感器,另外它也可以用于更多场景。
此文档描述 MQTT 3.1 的一些特征,为了帮助终端用户需要了解更多的
MQTT 相关信息,请查看http://mqtt.org/。
发布/订阅
MQTT协议是基于发布消息与订阅主题的(或pub/sub)。多客户连接到一个 broker,并订阅其关注主题。客户连接到该 broker,并发布主题消息。许多客户端可能订阅同一个主题,并按照各自需求处理该信息。broker 和 MQTT 作为一个简单通用的接口提供连接。这意味着你可以保存所有的订阅消息到数据库、推特、Cosm、或简单的文本文件。
主题/订阅
在 MQTT 中消息是按照主题发布的,没有必要对主题进行专门配置,在消息发布时候指定主题就够了。主题是以斜杠(/)形式层级组织。这样就可以合理安排共同的主题的创建,跟文件系统的组织方式很像。例如,许多电脑都需要发布其硬盘的温度信息到下面一个主题,把下面的主题用适当的电脑名和硬盘名替代:
sensors/COMPUTER_NAME/temperature/HARDDRIVE_NAME
客户端通过创建订阅来接收消息。一个订阅可以是一个明确的主题,在此情况下客户端仅仅能够接收该主题下的消息,订阅主题也可以包含通配符。+ 和 # 两个通配符是有效的。
+ 能被用作单一层级的通配符。如下主题能够用于订阅所有的电脑的硬盘温度:
sensors/+/temperature/+
另一个例子,对于主题 "a/b/c/d",下面的主题订阅都能够匹配该主题:
- a/b/c/d
- +/b/c/d
- a/+/c/d
- a/+/+/d
- +/+/+/+
下面的订阅主题将不能够匹配: - a/b/c
- b/+/c/d
- +/+/+
通配符 # 能被用于所有剩余层级。这意味着 # 必须是订阅的结尾字符。对于主题 "a/b/c/d",下面的订阅将是匹配的:
- a/b/c/d
- #
- a/#
- a/b/#
- a/b/c/#
- +/b/c/#
零长度的主题层级是有效的,它可能导致一些轻微的晦涩行为。例如,主题 "a//topic" 可以正确匹配订阅 "a/+/topic"。同样地,零长度主题层级可以存在于一个主题字符串的开头与结尾,所以 "/a/topic" 将匹配订阅 “+/a/topic”、“#”和“/#”,并且主题 “a/topic/” 将匹配订阅“a/topic/+”或“a/topic/#”。
服务质量
MQTT 定义了三个级别的服务质量(QoS)。QoS 定义了 broker/client 如何努力确保消息被正确接收。消息可以以任何 QoS 级别发送,并且客户端可以尝试以任何 QoS 级别订阅主题。这意味着客户端选择其将收到的最大的 QoS。例如,如果一个消息以 QoS 2 发布,并且客户端以 QoS 0 订阅,此消息将被按照 QoS 0 传送到客户端。如果另一个客户端也订阅了该主题,但是 QoS 为 2,那么此客户端将以 QoS 2 接收到同样的消息。对于第二个例子,如果客户端是以 QoS 2进行订阅,但此消息以 QoS 0 发布,则此客户端将以 QoS 0 接收该消息。
QoS 级别越高越可靠,但是牵涉更高的延迟,并有更高的带宽需求。
- 0:broker/client 将传送消息一次,并且无确认。
- 1:broker/client 将传送消息至少一次,并且需要确认。
- 2:broker/client 将通过使用 4 次握手准确地传送消息一次。
保留标志
所有的消息都可以被设置为保留。这意味着即使一个消息对于当前所有的订阅者都已经发送,broker 仍将保留此消息。如果一个匹配该保留消息主题的新订阅者到达,那么次保留消息将被发送到此客户端。这对于实现“最后一次正确”的机制是很有用的。如果一个主题消息很少更新,且没有设置保留标志,一个新来的订阅客户端可能不得不等待很长一段时间才能收到一个更新。对于一个设置保留标志的消息来说,客户端将立即接收到更新。
清除会话 / 持久连接
一个设置了清除会话(有时也叫做清楚开始标志)标识的连接,如果清除会话设置为 false,那么此连接就是一个持久连接。这意味着当客户端断开连接时,任何订阅者都将保留,且 QoS 为 1 或 2 的任何订阅消息队列都将存储下来,直到再次成功连接。如果清除会话标志为 true,那么当客户端断开连接时,所有订阅者都将被移除。
遗嘱
当客户端连接到 broker 时,它可以通知该 broker 表明其有一个遗嘱。当客户端异常断开时,它希望 broker 发送一个消息。此消息的主题、QoS 和 保留标志 与任何其它消息保持一样。
版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)
网友评论