ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

MQTT协议与EMQ笔记

2021-10-12 19:02:58  阅读:185  来源: 互联网

标签:订阅 协议 笔记 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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有