其他分享
首页 > 其他分享> > MQTT协议与EMQ笔记

MQTT协议与EMQ笔记

作者:互联网

1.MQTT协议主要特性

  (1)开放消息协议,简单易实现。   (2)使用发布/订阅消息模式,提供一对多的消息发布,解除应用程序耦合。   (3)对负载(协议携带的应用数据)内容屏蔽的消息传输。   (4)基于TCP/IP网络连接,提供有序,无损,双向连接。主流的MQTT是基于TCP连接进行数据推送的,但是同样有基于UDP的版本,叫做MQTT-SN。这两种版本由于基于不同的连接方式,优缺点自然也就各有不同了。   (5)消息服务质量(QoS)支持,可靠传输保证;有三种消息发布服务质量:     QoS0:"至多一次",消息发布完全依赖底层TCP/IP网络。会发生消息丢失或重复。这一级别可用于如下情况,环境传感器数据,丢失一次读记录无所谓,因为不久后还会有第二次发送。这一种方式主要普通APP的推送,倘若你的智能设备在消息推送时未联网,推送过去没收到,再次联网也就收不到了。     QoS1:"至少一次",确保消息到达,但消息重复可能会发生。     QoS2:"只有一次",确保消息到达一次。在一些要求比较严格的计费系统中,可以使用此级别。在计费系统中,消息重复或丢失会导致不正确的结果。这种最高质量的消息发布服务还可以用于即时通讯类的APP的推送,确保用户收到且只会收到一次。   (6)1字节固定报头,2字节心跳报文,最小化传输开销和协议交换,有效减少网络流量。这就是为什么在介绍里说它非常适合"在物联网领域,传感器与服务器的通信,信息的收集,要知道嵌入式设备的运算能力和带宽都相对薄弱,使用这种协议来传递消息再适合不过了。   (7)在线状态感知:使用Last Will和Testament特性通知有关各方客户端异常中断的机制。     Last Will:即遗言机制,用于通知同一主题下的其他设备,发送遗言的设备已经断开了连接。     Testament:遗嘱机制,功能类似于Last Will。   2.MQTT协议实现方式   实现MQTT协议需要客户端和服务器端通讯完成,在通讯过程中,MQTT协议中有三种身份:发布者(Publish)、代理(Broker)(服务器)、订阅者(Subscribe)。其中,消息的发布者和订阅者都是客户端,消息代理是服务器,消息发布者可以同时是订阅者。   MQTT传输的消息分为:主题(Topic)和负载(payload)两部分:     (1)Topic,可以理解为消息的类型,订阅者订阅(Subscribe)后,就会收到该主题的消息内容(payload);     (2)payload,可以理解为消息的内容,是指订阅者具体要使用的内容。   3.发布/订阅、主题、会话 (允许动态创建主题)   订阅者(Subscriber) 会向 消息服务器(Broker) 订阅一个 主题(Topic) 。成功订阅后,消息服务器会将该主题下的消息转发给所有的订阅者。   主题(Topic)以 ‘/’ 为分隔符区分不同的层级。包含通配符 ‘+’ 或 ‘#’ 的主题又称为 主题过滤器(Topic Filters); 不含通配符的称为 主题名(Topic Names) 例如:        发布者(Publisher) 只能向 ‘主题名’ 发布消息,订阅者(Subscriber) 则可以通过订阅 ‘主题过滤器’ 来通配多个主题名称。   会话(Session):每个客户端与服务器建立连接后就是一个会话,客户端和服务器之间有状态交互。会话存在于一个网络之间,也可能在客户端和服务器之间跨越多个连续的网络连接。   4.MQTT协议中的方法    MQTT协议中定义了一些方法(也被称为动作),来于表示对确定资源所进行操作。这个资源可以代表预先存在的数据或动态生成数据,这取决于服务器的实现。通常来说,资源指服务器上的文件或输出。主要方法有:     (1)CONNECT:客户端连接到服务器     (2)CONNACK:连接确认     (3)PUBLISH:发布消息     (4)PUBACK:发布确认     (5)PUBREC:发布的消息已接收     (6)PUBREL:发布的消息已释放     (7)PUBCOMP:发布完成     (8)SUBSCRIBE:订阅请求     (9)SUBACK:订阅确认     (10)UNSUBSCRIBE:取消订阅     (11)UNSUBACK:取消订阅确认     (12)PINGREQ:客户端发送心跳     (13)PINGRESP:服务端心跳响应     (14)DISCONNECT:断开连接     (15)AUTH:认证   5.MQTT协议数据包结构    在MQTT协议中,一个MQTT数据包由:固定头(Fixed header)、可变头(Variable header)、消息体(payload)三部分构成。MQTT数据包结构如下:     (1)固定头(Fixed header)。存在于所有MQTT数据包中,表示数据包类型及数据包的分组类标识,如连接,发布,订阅,心跳等。其中固定头是必须的,所有类型的MQTT协议中,都必须包含固定头。     (2)可变头(Variable header)。存在于部分MQTT数据包中,数据包类型决定了可变头是否存在及其具体内容。可变头部不是可选的意思,而是指这部分在有些协议类型中存在,在有些协议中不存在。     (3)消息体(Payload)。存在于部分MQTT数据包中,表示客户端收到的具体内容。 与可变头一样,在有些协议类型中有消息内容,有些协议类型中没有消息内容。   6.固定头(Fixed header)           

  

  

  

   

   

   

   

   

 

 7.可变头(Variable Header)

  

  

 

8.消息体(Payload)

  

 

标签:订阅,协议,笔记,MQTT,EMQ,消息,数据包,客户端
来源: https://www.cnblogs.com/aganblog/p/15386037.html