Mqtt概念

作者: kason_zhang | 来源:发表于2017-03-30 16:02 被阅读229次

1,Qos
Qos有三个值,0,1,2
Qos=0, 消息只发送一次,提交 message 一次,不执行‘确认’操作,有可能客户端收不到,但是不重发
Qos=1,消息至少发送一次,提交 message 至少一次,含有‘确认’请求,会执行'确认'操作。
Qos=2,消息精确发送一次,使用'4步握手'保证精确的提交一次 message.
当Qos等于1或者2时,此时的消息是持久消息。如果客户机采用 QoS 1 或者 QoS 2 来发布消息,那么此消息为持久消息。此消息存储在本地,并且仅在不再需要它来确保“至少一次”QoS=1 或“刚好一次”QoS=2 传递时才从客户机中除去。

当 publish message 使用的 QoS 不同于 subscribe message 使用的 QoS 时, message 发送到 subscribed client 时,使用较低级别的 QoS,即取值为两者较小值。
e.g.:
(a) published message 使用 QoS 2, 一个 client0 订阅时使用 QoS 0, 那么
message 提交给这个 client0 时使用 QoS 0.
(b) 另一个 client1 订阅到这个 Topic 使用 QoS 2, 那么 message 提交给这个
client 时使用 QoS 2.
(c) 如果一个 client2 订阅时使用 QoS 2, 另一个 client3 publish message
使用 QoS 0, message 提交给 client2 时使用 QoS 0.

2,Retained Messages.
Retained 这个字段:适用于设定是否要将消息保留在server上,此特性只有PUBLISH才會用到

  1. 所有的 message 都可以设置为保留的。broker 保留 message 直到所有的订阅者接收 message(这之后会删除此消息).
  2. 而且当一个新的 client 订阅这个 topic,这个条 message 也会提交到这个 client.
  3. 可以用 retained message 来实现"last known good"机制。

3, Clean session / Durable connections
clean session flag:
0: 代表当Client1由于网络原因断线时,broker必须把该client1订阅了哪个主题给记录下来。由于一个主题可能有多个client,因此在这个Client1断线的期间,如果有其他的Client而且Qos为1或者2的消息发布到该主题上,则broker必须把消息存储下来,等到Client1网络恢复再次连接上broker时,确保它能够收到它断线没收到的消息。
1:代表当Client断线时,broker必须要清除该Client所有的状态,等此Client网络恢复时,重新连上线时,它必须重新订阅它感兴趣的主题topic。

  1. client 连接到 broker 时设置 clean session flag 为 false, client 与 broker
    间建立了一个长连接(Durable connnecton); 当 client 断开与 broker 的连接时,
    任何 subscriptions 还有剩余的 QoS 为 1 或 2 的 messages,
    那么会保存这些 subscriptions/messages 直到再次连接。

  2. 如果 clean session flag 为 true,就相当于 'session start', 当 disconnect 时,
    会移除这个 client 所有的 subscriptions

4, will
will类似于现实中的遗嘱,有4个值需要注意
will flag, will Qos,will Retain flag ,will topic
遗嘱这个机制很多人可能搞不清,它是这样的,client一开始发送CONNECT消息给broker要求建立连接时,就要把要对哪个主题说什么遗言一起传给broker,当它在不正常的情况下断线时(比如断网,装置故障等),则这些消息就会被broker主动发布到该主题上。但是如果是client主动调用disconnect发送给broker要求断开连接时,就不会触发遗嘱机制。
如何启动此机制:
首先将will flag置为1,代表启用will机制,之后你设定的QOS为何,broker就会依照你设定的QOS 等级来帮你传送这个遗嘱消息,最后设置此遗言是否要保留在broker上。如果设定了will flag, 则在payload内会需要定义will topic will message,也就是对哪个主题topic发送什么样的遗言will messsage。
will 是一种 message, 无异于其他 mqtt message。
在 client 与 broker 建立连接时,client 告知 broker 一个 will message,用来
在 client 与 broker 不正常断开连接时发送 will message 到一个特殊的 topic。
这个特殊的 topic 是一个 system topic; system topic 有特殊命名,有特殊的访问权限,用于管理。
will message 同样可以设置 QoS.

相关文章

  • Python中使用MQTT传输数据

    MQTT的基础概念 MQTT(Message Queuing Telemetry Transport,消息队列遥测...

  • Mqtt概念

    1,QosQos有三个值,0,1,2Qos=0, 消息只发送一次,提交 message 一次,不执行‘确认’操作,...

  • mqtt离线消息的实现

    在介绍mqtt离线消息之前,先了解下mqtt协议的几个概念:QoS(Quality of Service)指代消息...

  • 在 iOS 中使用 MQTT 协议

    有关 MQTT 协议的概念这里不做过多描述,网上有大把的文章。本文主要讨论 MQTT 协议在 iOS 中的应用。 ...

  • MQTT系列-基础概念

    MQTT 的全称为 Message Queue Telemetry Transport(消息队列遥测传输协议)是在...

  • MQTT协议

    MQTT轻量级物联网消息推送协议 1.概念 MQTT是机器对机器(M2M)/物联网(IoT)连接协议。它被设计为一...

  • MQTT 小结 以及 阿里云iot studio调试

    MQTT mqtt是iot比较常用的一个协议,但是一直还没实际上手过。其实主要是几个概念。 broker 基本上就...

  • MQTT协议的基础概念

    1、MQTT协议简介 MQTT 是什么 MQTT 的全称为 Message Queue Telemetry Tra...

  • MQTT的基本概念

    MQTT 通讯的基本逻辑 发布者将要发布的信息传送给MQTT服务器(的某个主题下),订阅者从对应的主题中读取信息 ...

  • MQTT详解及百度物接入连接手机测试(含源码)

    MQTT简介 MQTT定义 MQTT(Message Queuing Telemetry Transport,消息...

网友评论

    本文标题:Mqtt概念

    本文链接:https://www.haomeiwen.com/subject/kfkpottx.html