MQTT物联网

        物联网通讯是物联网的一个核心内容,目前物联网的通讯协议并没有一个统一的标准,比较常见的有MQTT、 CoAP DDS XMPP 等,其中, MQTT (消息队列遥测传输协议)是应用最广泛的标准之一。

一.MQTT简介

        什么是MQTT?先从名字来看,Message Queuing Telemetry Transport:消息队列遥测传输。《MQTT 协议规范中文版》中的解释是:

MQTT 是一种基于客户端服务端架构的发布 / 订阅模式的消息传输协议。它的设计思想是轻巧、开放、 简单、规范,易于实现。这些特点使得它对很多场景来说都是很好的选择,特别是对于受限的环境如机器与 机器的通信( M2M )以及物联网环境( IoT )。

         MQTT协议是应用层协议,其最大的优点是以极少的代码和有限的带宽(低开销、低带宽),为连接远程设备提供实时可靠的消息服务。

二.MQTT主要特性

使用发布/订阅消息模式,提供一对多的消息发布。

②基于TCP/IP提供网络连接(也有UDP版本)。

③根据消息的重要性不同设置不同的服务质量等级QoS。

④开销小,带宽占用小。

⑤使用 will 遗嘱机制来通知客户端异常断线。

⑥基于主题发布/订阅消息,对负载内容屏蔽的消息传输。

⑦支持心跳机制。

三.MQTT协议

MQTT Version 3.1.1 协议资料

1.MQTT 通信基本原理

        MQTT是一种基于 客户端 - 服务端 架构的消息传输协议,所以 最重要的角色便是服务端 客户端
        服务端
        在MQTT中,服务端一般是服务器,它主要负责接收客户端消息、发布消息到客户端,以及管理客户端,保证客户端之间的通信消息正确传输和接收。
        客户端
        MQTT 客户端可以向服务端发布信息,也可以从服务端收取信息;把客户端发送信息的行为称为 “发布”信息。而客户端要想从服务端收取信息,则首先要向服务端“订阅主题”信息。“订阅主题”信息这一操作就是告诉服务端,以后这个主题下的消息更新时请发送给我。
        MQTT主题
        “主题”在 MQTT 通信中是一个非常重要的概念,客户端发布信息以及订阅信息都是围绕“主题”来进行的,并且 MQTT 服务端在管理 MQTT 信息时,也是使用“主题”来控制的。
        客户端发布消息时需要为消息指定一个“主题”,表示将消息发布到该主题;而对于订阅消息的客户端来说,可通过订阅“主题”来订阅消息,这样当其它客户端或自己向该主题发布消息时,MQTT 服务端就会将该主题的信息发送给订阅了该主题的客户端。
        如图为一个简单地MQTT实例,在这个实例中有三个客户端以及一个服务器,三个客户端都订阅了“芯片温度”这个主题,当开发板向这个主题发送消息时。消息会送到服务器,服务器对消息进行分析处理后向订阅了该主题的其他两个客户端发送开发板发送的芯片温度消息。这样我们就能从手机或者电脑上获得芯片温度的消息,同理我们还能做很多很多事情。

        在MQTT中客户端既可以作为消息的发布者,也可以作为消息的订阅者。在下图中,手机和电脑客户端成为了 MQTT 信息的发布者而开发板则成为了 MQTT 信息的订阅者。

        MQTT 发布 / 订阅特性
        从上述实例中可以看出,MQTT 通信的核心枢纽是 MQTT服务端它负责将 MQTT客户端发送来的 信息传递给 MQTT 客户端,还负责管理 MQTT 客户端,以确保客户端之间的通讯顺畅,保证 MQTT 信息得以正确接收和准确投递。
        因为服务器端的存在,MQTT的发布和订阅具有以下分布/订阅特性:
        客户端 相互独立:
        MQTT 客户端之间是相互独立的,它们则用做自己想做的事,不用管其他客户端是谁,就可以实现信息交流。
        空间上 分离:
网络通信嘛。
        时间上 异步:
        MQTT 客户端在发送和接收信息时无需同步,因为物联网设备在运行过程中发生意外掉线是非常正常的情况。假如因为某种原因开发板断开与 MQTT 服务端的连接。假设此时我们的手机客户端向开发板客户端所订阅的“LED 控制”主题发布了信息,而开发板恰恰不在线,这时,MQTT 服务端可以将“LED 控制”主题的新信息保存,待开发板客户端再次上线后,服务端再将“LED 控制”信息推送给开发板。所以这就必然导致了,手机发送信息与开发板接收信息在时间上是异步的。

2.MQTT连接服务端

        在MQTT中想要实现客户端的通信,必须借助服务端,所以必须先和服务器建立连接。其具体连接步骤分为以下两步:

①客户端向服务端发送一个请求连接的CONNECT报文,也就是发送了一个CONNECT数据包;

MQTT服务端收到连接请求后,会向客户端发送连接确认的CONNACK报文,也就是 CONNACK 数据包。

        CONNECT报文:

        客户端发的的CINNECT报文必须符合规范,否则服务端会拒绝连接,CONNECT报文的主要内容如下:

        MQTT 报文组成分为三个部分
  • 5
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我的未来不是梦嘻嘻

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值