首页 > 编程知识 正文

mqtt应用实例,mqtt协议是基于tcp吗

时间:2023-05-05 11:22:51 阅读:44092 作者:3903

消息队列嵌入式传输端口(MQTT )构建在TCP/IP协议上,是IBM于1999年开发的基于发布/订阅模式的“轻量级”通信协议,用于MQTT 作为低开销、低带宽的即时消息传递协议,广泛用于物联网、小型设备、移动APP应用等。

MQTT是基于客户端/服务器的消息传递/订阅传输协议。 MQTT协议重量轻、简单、开放、易于实现,这些特点使其适用范围非常广泛。 许多情况下,包括受限的环境,例如机器与机器(M2M )的通信或物联网(IoT )。 其中,被广泛用于通过卫星链路的通信传感器、偶尔拨号的医疗设备、智能家庭以及一些小型化设备。

信息是按主题层次结构组织的。 当发布者具有要分发的新数据时,包含该数据的控制消息将发送到连接的代理。 然后,代理将信息分发到订阅主题的所有客户端。 发布者不需要有关订户数量和位置的数据,订户也不需要配置有关发布者的数据。

1. MQTT协议分组结构在MQTT协议中,一个MQTT分组由三个部分组成:固定报头、可变报头和消息主体。 MQTT数据包结构如下:

)1)固定头(固定头)。 存在于所有MQTT包中,表示包类型和包的包类标识符。 包括消息服务质量QOS等(2)可变头(Variable header )。 一些MQTT数据包中,数据包类型决定有无可变报头及其具体内容。 (3)消息体) Payload )。 存在于某些MQTT数据包中,显示客户端接收到的具体内容。 MTT协议实现方式

要实现MQTT协议,客户端和服务器端的通信必须完成。 在通信期间,MQTT协议有三个id :发布者(Publish )、代理(Broker ) (服务器)和订阅(Subscribe )。其中,消息的发布者和订阅者都是客户端,消息代理是服务器,消息发布者可以同时是订阅者。

MQTT发送的消息分为两部分:主题(Topic )和有效载荷。

)1)主题可以理解为消息的类型,当订阅者订阅时,payload接收该主题的消息内容(payload ),可以理解为消息的内容,供订阅者具体使用2. MQTT协议术语2.1订阅(订阅) )。

订阅包含“主题过滤器”(Topic Filter )和“最大服务质量”(QoS )。 订阅与“会话”(Session )相关联。 一个会话可以包含多个订阅。 每个会话的每个订阅都有不同的主题过滤器。

2.2会话(会话)会话)

当每个客户端和服务器建立连接时,它们将成为会话,并且客户端和服务器之间存在状态交换。 会话位于网络之间,并且可能跨越客户端和服务器之间的多个连续网络连接。

2.3主题名称(主题名称)。

连接到与服务订阅匹配的APP应用程序消息的标签。 服务器向订阅了匹配标签的每个客户端发送消息。 系统主题:通过定义以$SYS开头的主题,可以显示系统信息,如客户端连接数

2.4主题过滤器(主题过滤器) ) ) ) ) ) ) ) )。

主题名称的通配符过滤器。 表示订阅表达式中使用且与订阅匹配的多个主题。

2.5负载(支付) )。

消息订阅者具体接收到的内容。

3.MQTT协议设计原则MQTT必须简单、容易实现,必须支持QoS,必须重量轻、带宽省,那时带宽高,不关心Payload数据格式,持续对话

灵活的发布订阅和主题设计的发布订阅模型是传统客户端/服务器模型的解除绑定方案。 发布者通过中介与消费者进行通信,中介的作用是通过一些过滤规则将接收的消息正确地发送给消费者。 发布/订阅模型相对于客户机/服务器模型的好处包括

呼叫者和消费者之间不需要事先知道对方的存在。 例如,事先不需要在对方的IP地址、端口呼叫者和消费者之间同时动作。 因为Broker一直在运行。 在MQTT协议中,上述过滤规则是Topic。 例如,发布到主题为news的所有邮件都将转发到由中介订阅news的订阅者:

上图的订阅者订阅了news。 然后,发布者指定在中介发布消息“some msg”,并发布到news主题。 Broker决定通过主题匹配将此邮件转发给订阅者。

4 .为了使消息服务质量适应设备不同的网络环境,MQTT设计了三个QoS等级: 0、1、2:

固定标头中的标识包括消息传递服务质量质量服务质量(QoS ),分为三类。

QOS=0:“最多一次”,消息传递完全依赖于底层的TCP/IP网络。 发生新闻

丢失或重复。这一级别可用于如下情况,环境传感器数据,丢失一次读记录无所谓,因为不久后还会有第二次发送。这一种方式主要普通APP的推送,倘若你的智能设备在消息推送时未联网,推送过去没收到,再次联网也就收不到了。

QOS = 1:“至少一次”,确保消息到达,但消息重复可能会发生。
PUBACK消息是对QoS级别为1的PUBLISH消息的响应.PUBACK消息由服务器发送以响应来自发布端的PUBLISH消息,订阅端也会响应来自服务器的PUBLISH消息。当发布端收到PUBACK消息时,它会丢弃原始消息,因为它也被服务器接收(并记录)。

QOS =2:“只有一次”,确保消息到达一次。在一些要求比较严格的计费系统中,可以使用此级别。在计费系统中,消息重复或丢失会导致不正确的结果。这种最高质量的消息发布服务还可以用于即时通讯类的APP的推送,确保用户收到且只会收到一次。

5. Mqtt的客户端工具如下: MQTT XMosquito CLIMQTT.fxMQTT ExplorerMQTT Boxmqtt-spyMQTT LensMQTT WebSocket Toolkit 6. 开源 MQTT 服务器如何选择

到目前为止,比较流行的开源 MQTT 服务器有几个:

Eclipse Mosquitto使用 C 语言实现的 MQTT 服务器。Eclipse 组织还还包含了大量的 MQTT 客户端项目:https://www.eclipse.org/paho/#EMQ X使用 Erlang 语言开发的 MQTT 服务器,内置强大的规则引擎,支持许多其他 IoT 协议比如 MQTT-SN、 CoAP、LwM2M 等。Mosca使用 Node.JS 开发的 MQTT 服务器,简单易用。VerneMQ同样使用 Erlang 开发的 MQTT 服务器.

从支持 MQTT 5.0、稳定性、扩展性、集群能力等方面考虑,EMQ X 的表现应该是最好的:

使用 Erlang OTP 开发,容错能力好 (电信领域久经考验的语言,曾经做出过 99.9999999% 可用性的交换机设备5)官方有大量的扩展插件可供扩展。有很多认证插件,数据存储(backend)插件可供选择。可支持各种关系型数据库,NoSQL 数据库,以及常见消息队列如 Kafka,RabbitMQ,Pulsar 等支持集群,支持节点水平扩展单节点支持 2000K 并发连接支持规则引擎和编解码 7.平时开发调试时,如果需要用到mqtt服务器,则可以下载安装emqx

// 4.1 Download emqx

wget https://www.emqx.io/downloads/broker/v4.2.7/emqx-ubuntu18.04-4.2.7-x86_64.deb

// 4.2 Install

sudo dpkg -i emqx-ubuntu18.04-4.2.7-x86_64.deb

// 4.3 Run

sudo emqx start (如果启动成功,终端会提示:started successfully!)

ps:如果想查看emqx服务器协议,启动成功可以通过浏览器访问 http://127.0.0.1:18083,将看到一个EMQX登录界面(默认的用户名/密码为admin/public,可以通过配置文件修改)

注意:调试时,确保代码中的服务器地址和此处一致

// 4.4 如果想关闭,终端执行:

sudo emqx stop

参考文献:

MQTT 入门介绍2020 年常见 MQTT 客户端工具比较emqxlinux下安装MQTT服务器 - EMQTT

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。