2020-10-15 MQTT基础知识
发表时间:2020-10-19
发布人:葵宇科技
浏览次数:51
MQTT同HTTP属于第七层(应用层:面向用户的一层,为用户提供常用的应用程序)
1.机器之间的大规模沟通:发布/订阅(Publish/Subscribe)模式
它使发送消息的客户端(发布者)与接收消息的客户端(订阅者)分离,发布者与订阅者不需要建立直接联系,中间代理根据主题负责所有消息路由和分发的工作
物品则通过各种传感器进行信息采集,然后通过计算设备进行网络信息交换与通信
增强了整个系统的可靠性,当一个客户端出现故障时,整个系统可以继续正常工作。
2.MQTT是基于二进制消息的发布/订阅编程模式的消息协议
基于TCP/IP协议栈
通俗来说是一个类似新浪微博的自动转发服务器
3.MQTT与HTTP比较
HTTPMQTT
相同点
都是应用层协议,都运用了底层协议TCP(三次握手)
TCP/IP协议栈
客户端和服务器之间是请求/应答模式,客户端请求时,会建立一个HTTP连接,然后发送请求消息,服务端给出应答消息,开销大
发布/订阅模式
发布者与订阅者不需要建立直接联系,简单、轻量、易于实现
HTTP 是一种同步协议,客户端需要等待服务器响应
异步消息协议更适合 IoT 应用程序,因为大量设备以及很可能不可靠或高延迟的网络使得同步通信成为问题
HTTP 是单向的,客户端必须发起连接,才能得到响应
在 IoT 应用程序中,设备或传感器通常是客户端,这意味着它们无法被动地接收来自网络的命令
网络接口层——接受网络上的数据,抽出IP数据报,交给网络层
网络层——处理传输层请求,发往适当接口/接受输入数据报
传输层——应用程序间通信
应用层——给用户提供服务
3.原理
MQTT协议中有三种身份:
服务器 代理(Broker)
客户端 发布者(Publish)、订阅者(Subscribe)
消息发布者可以同时是订阅者
MQTT传输的消息分为:
主题(Topic) 消息的类型,订阅者订阅(Subscribe)后,就会收到该主题的消息内容
负载(payload) 消息的内容
完整流程
-
1) 启动服务器代理。
-
2) 订阅者向服务器代理订阅相关主题。
-
3) 发布者向服务器代理发布主题信息。
-
4) 服务器代理向所有订阅该主题的订阅者推送消息。
有三种消息发布服务质量:
"至多一次"(Qos=0),消息发布完全依赖底层TCP/IP网络。会发生消息丢失或重复。这一级别可用于如下情况,环境传感器数据,丢失一次读记录无所谓,因为不久后还会有第二次发送。这一种方式主要普通APP的推送,倘若你的智能设备在消息推送时未联网,推送过去没收到,再次联网也就收不到了。
"至少一次"(Qos=1),确保消息到达,但消息重复可能会发生。
"只有一次"(Qos=2),确保消息到达一次。在一些要求比较严格的计费系统中,可以使用此级别。在计费系统中,消息重复或丢失会导致不正确的结果。这种最高质量的消息发布服务还可以用于即时通讯类的APP的推送,确保用户收到且只会收到一次。
发送消息时,可以指定QoS,如果QoS>0,那么消息一定会发到Broker。订阅主题时,也可以指定QoS,如果QoS>0,那么Broker一定会将消息发给订阅者,不会丢失。这里要要注意,消息从发布者到订阅者,是分两步走的,第一步有发布者发布到MQTT Broker,第二步是MQTT Broker转发消息到订阅者。所以只有当发布消息时,指定QoS>0,并且订阅主题时,QoS>0,消息才能可靠的从发布客户端发送到订阅客户端。