美文网首页
MQTT协议理解

MQTT协议理解

作者: 今後次 | 来源:发表于2017-06-06 17:18 被阅读445次

开始

MQTT协议的开发公司,诞生时间等信息,可以通过google先生去查,这里就省略了。只说以下几个信息。

  • 最新版本3.1.1
  • 协议的详细内容,有各个语言版本的说明。中文版链接
  • linux上最常用的是mosquitto

优点

  • 十分轻量,最小可以做到2byte。处理速度快,占用带宽小。特别适合在M2M场景下使用。
  • 可以做到一对一,一对多,双向通信
  • 实际上也是基于TCP/IP的
  • 消息可控可处理。采用pub/sub的方式,pub端发送某一主题的消息给服务器,sub订阅某些主题。中间的服务器可以进行很多处理,然后分发消息给sub。

主题管理

sub只能接收订阅的主题。主题可以使用[/]来设定成阶层的构造。
比如sub端想接收某一个服务器(或者是数据中心)的温度湿度消息。

/datacenter/abc/tokyo/floor/01/temperature
/datacenter/abc/tokyo/floor/01/humidity
/datacenter/abc/osaka/floor/01/temperature
/datacenter/abc/osaka/floor/01/humidity
/datacenter/xyz/tokyo/floor/05/temperature
/datacenter/xyz/tokyo/floor/05/humidity
/datacenter/xyz/nagoya/floor/12/temperature
/datacenter/xyz/nagoya/floor/12/humidity

sub端可以使用一些符号,模糊订阅一批主题。

  • 准确订阅

/datacenter/abc/tokyo/floor/01/temperature

ABC数据中心的tokyo的1层的温度

  • 前方一致订阅

/datacenter/xyz/nagoya/#

使用[#]获取 xyz数据中心的nagoya的所有阶层的温度和湿度

  • 部分一致订阅

/datacenter/+/tokyo/floor/+/humidity

使用[+]获取所有数据中心的tokyo的所有阶层的湿度

[#]和[+]可以组合使用。

** 有意思的是sub可以使用通配符订阅,pub端却不能使用,必须发布完整的主题名 **

QoS

pub 发布消息到达sub端,可以指定以下三种品质等级
QoS0 : 就发送一次,sub收到收不到都不再重新发。
**QoS1 **: 保证至少sub端收到一次。但是有可能多次接到。

  • pub发送出去后,需要sub返回一个【已收到】的回信。如果pub在一定时间未收到回信,会重复发送同一个消息,直到收到sub的回信。

QoS2 : 保证至少且只有一次sub端接到消息。

  • 这个属于比较有意思的一项。需要来回两次,每次携带的状态码都不一样。在成功前,会一直重复发送。直到最终成功。
概念图

遗言机制

协议有专门设定遗言的标志: Will Flag。同时会影响另外两个位(Will Qos和Will Retain)是否有效。

Will Flag
就是pub客户端预先定义好,在自己跟MQTT服务器异常断开的情况下,所留下的最后遗愿(Last Will),也称之为遗嘱(Testament)。 这个遗嘱就是一个由客户端预先定义好的主题和对应消息,附加在CONNECT的可变头部中,在客户端连接出现异常的情况下,由服务器主动发布此消息。
只有在Will Flag位为1时,Will Qos和Will Retain才会被读取,此时消息体Playload中要出现Will Topic和Will Message具体内容,否则,Will QoS和Will Retain值会被忽略掉。

Will Qos
两位表示,和PUBLISH消息固定头部的QoS level含义一样。
若标识了Will Flag值为1,那么Will QoS就会生效,否则会被忽略掉。

Will RETAIN
如果设置Will Flag,Will Retain标志就是有效的,否则它将被忽略。
当客户端意外断开服务器发布其Will Message之后,服务器是否应该继续保存。这个属性和PUBLISH固定头部的RETAIN标志含义一样。

PUBLISH固定头部的RETAIN
定义MQTT服务器是否保留最后一次pub传递过来的消息。如果保留的话,当下一次消息发布前,如果有心的sub端加入,那么就把MQTT上保留的消息发送给新追加的sub端。
比如:一个小时或者一天才发布一次,新的消息接收端(sub端)却随时会追加的场景,就适合设定设定RETAIN。

相关文章

  • MQTT协议理解

    开始 MQTT协议的开发公司,诞生时间等信息,可以通过google先生去查,这里就省略了。只说以下几个信息。 最新...

  • 树莓派搭建MQTT服务器

    严格来说应该是MQTT消息代理,不过服务器可能更容易被理解一些。 MQTT协议 这个协议在物联网用的还是挺多的,而...

  • MQTT协议总结

    MQTT Protocol MQTT协议特性 一句话总结:MQTT是一个简单,轻量的消息发布/订阅协议。 MQTT...

  • 物联网mqtt协议

    mqtt协议学习与使用 一.先简单介绍一下mqtt协议 mqtt协议是基于Tcp/ip 的一种通信协议,是建立在可...

  • MQTT协议简单实践

    #一、 实验目的 学习了解MQTT协议,并会简单的使用。 #二、实验内容 熟悉使用MQTT协议,并利用MQTT进行...

  • MQTT 协议 Keep Alive 详解

    MQTT 协议中的 Keep Alive 机制 为什么需要 Keep Alive MQTT 协议[https://...

  • 使用 MQTT 实现发布订阅功能 发送订阅控制Esp8266

    Connect 连接 MQTT 协议基于 TCP/IP 协议,MQTT Broker 和 Client 都有需要有...

  • 基于MQTT协议实现Broker

    写在前面: 前一篇文字<<基于MQTT协议谈谈物联网开发>>主要叙述了MQTT协议的编解码以及基于MQTT协议的一...

  • 可视化网关编程系列教程-----(8)MQTT设备接入与控制

    MQTT 协议介绍 MQTT是一个基于客户端-服务器的消息发布/订阅传输协议。MQTT协议是轻量、简单、开放和易于...

  • iOS MQTTClient

    什么是MQTT MQTT(消息队列遥测传输),基于发布/订阅的消息协议。MQTT工作在TCP/IP协议族上,是为硬...

网友评论

      本文标题:MQTT协议理解

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