赞
踩
MQTT(Message Queuing Telemetry Transport)协议是一种轻量级的、基于发布/订阅模式的通信协议。它最初由IBM开发,用于在低带宽和不稳定的网络环境中传输小型数据包。MQTT协议被广泛应用于物联网(IoT)领域,例如传感器数据采集、远程监控和控制等。
MQTT协议使用了一种异步的、非阻塞的消息传输模式。它包括三个主要组件:客户端、代理程序和主题(Topic)。客户端可以是发布者(Publisher)或订阅者(Subscriber),代理程序负责转发消息,主题用于标识消息的类型或内容。当一个客户端发布一个消息到一个主题上时,所有订阅该主题的客户端都会收到该消息。
MQTT协议具有以下特点:
据 Arlen Nipper 在 IBM Podcast 上的自述,MQTT 原名是 MQ TT
,注意 MQ
与 TT
之间的空格,其全称为: MQ Telemetry Transport,是九十年代早期他在参与 Conoco Phillips 公司的一个原油管道数据采集监控系统(pipeline SCADA system)时开发的一个实时数据传输协议。它的目的在于让传感器通过带宽有限的 VSAT ,与 IBM 的 MQ Integrator 通信。由于 Nipper 是遥感和数据采集监控专业出身,所以按业内惯例取了 MQ TT
这个名字。
MQTT vs HTTP
HTTP协议和SMTP协议都是基于TCP协议的,但是它们的数据包比MQTT协议大得多,通信开销也更大。在需要频繁传输小型数据包的应用场景中,MQTT协议的优势更加明显。
然而,MQTT协议也有一些缺点。例如,它只能传输小型数据包,不适合传输大型文件或数据流。另外,由于它是基于发布/订阅模式的,因此可能会存在消息丢失或消息重复的问题,需要根据实际应用场景来选择合适的QoS级别。
MQTT协议是一种基于发布/订阅模式的通信协议,它的双向通信机制是通过MQTT客户端与MQTT代理服务器之间的交互来实现的。下面是MQTT的双向通信机制的详细说明:
综上所述,MQTT的双向通信机制是通过客户端和代理服务器之间的发布/订阅模式实现的。客户端可以向代理服务器发送消息,并订阅一个或多个主题以接收代理服务器发送的消息。代理服务器可以向客户端发送消息,并根据客户端的订阅情况将消息转发给订阅相关主题的客户端。这种机制可以支持双向通信,并且非常适用于物联网等需要频繁传输小型数据包的应用场景。
emqx是一个基于Erlang语言开发的开源MQTT代理程序,它提供了一个可扩展的、高性能的MQTT消息传输服务。emqx支持多种QoS级别,以及基于WebSocket的MQTT传输协议。
以下是使用emqx搭建MQTT服务端和客户端的基本步骤:
官方网址:https://www.emqx.io/zh/downloads?os=Ubuntu
您可以在Linux上使用以下命令安装emqx:
curl -s https://assets.emqx.com/scripts/install-emqx-deb.sh | sudo bash
sudo apt-get install emqx
安装完成后,您可以使用以下命令启动emqx服务:
sudo systemctl start emqx
通过浏览器访问 http://localhost:18083/ (opens new window)(localhost 可替换为您的实际 IP 地址)以访问 EMQX Dashboard 管理控制台,进行设备连接与相关指标监控管理。
默认用户名及密码:
admin
public
在编写MQTT客户端程序之前,您需要知道emqx服务端的IP地址和端口号。然后,您可以使用MQTT客户端库连接到emqx服务端。
在Python中,您可以使用以下代码连接到emqx服务端:
import paho.mqtt.client as mqtt # MQTT服务端的IP地址和端口号 broker_address = "YOUR_BROKER_IP_ADDRESS" broker_port = 1883 # 创建一个MQTT客户端实例 client = mqtt.Client() # 连接到MQTT服务端 client.connect(broker_address, broker_port) # 启动MQTT客户端循环 client.loop_start() # 发布消息到MQTT服务端 topic = "test" payload = "Hello, World!" client.publish(topic, payload) # 订阅MQTT主题 topic = "test" def on_message(client, userdata, message): print(message.topic,message.payload.decode()) client.subscribe(topic) client.on_message = on_message # 保持MQTT客户端连接 while True: pass
在上面的代码中,我们使用paho-mqtt客户端库连接到emqx服务端,并发布一条消息到test主题。然后,我们订阅test主题,并在收到消息时打印出来。
为了保证MQTT通信的安全性,您可以在emqx服务端上配置ACL来限制访问。ACL可以控制哪些客户端可以连接到MQTT服务端,哪些客户端可以发布消息或订阅主题等。
以下是一个ACL配置文件的示例:
## emqx.access ## ------------------------------------------------------------------- ## emqx access control configuration file. ## ## GitHub: https://github.com/emqx/emqx/tree/master/etc/plugins/access ## ## ------------------------------------------------------------------- ## sys.* Topics ## ------------------------------------------------------------------- allow sys ## Anonymous users ## ------------------------------------------------------------------- ## allow anonymous publish/subscribe ## allow anonymous subscribe only to the public topics ## deny anonymous publish/subscribe ## ## pattern: $anonymous ## ## allow $anonymous publish to the public topics allow $anonymous read public/* allow $anonymous write public/+ ## allow $anonymous subscribe only to the public topics allow $anonymous subscribe public/+ ## deny $anonymous publish to any topics deny $anonymous ## Clients with username "public" ## ------------------------------------------------------------------- ## allow "public" publish/subscribe ## allow "public" subscribe only to the public topics ## deny "public" publish/subscribe to the "private" topics ## ## pattern: username/public ## ## allow username/public publish to the public topics allow username/public read public/+ allow username/public write public/+ ## allow username/public subscribe only to the public topics allow username/public subscribe public/+ ## deny username/public publish/subscribe to the private topics deny username/public write private/+ deny username/public read private/+ ## Clients with username "admin" ## ------------------------------------------------------------------- ## allow "admin" publish/subscribe to any topics ## ## pattern: username/admin ## ## allow username/admin publish/subscribe to any topics allow username/admin
在上面的ACL配置文件中,我们定义了三个规则:
您可以根据您的实际需求修改ACL配置文件,并将其保存为emqx.access文件。然后,将emqx.access文件复制到emqx的etc/plugins/access目录下,并重新启动emqx服务。
sudo cp emqx.access /etc/emqx/plugins/access/
sudo emqx restart
mqttx是集桌面应用、命令行工具与 Web 应用于一体的全功能 MQTT 客户端工具。是 EMQX 开源的一款跨平台 MQTT 5.0 客户端工具,它支持 macOS、Linux、Windows,并且支持自定义脚本模拟测试、MQTT 消息格式转换、日志记录等多个功能。您可通过 MQTTX 一键式的连接方式和图形界面,您可轻松测试 MQTT/TCP、MQTT/TLS、MQTT/WebSocket 连接。
官网:https://mqttx.app/zh/features
配置并建立 MQTT 连接。点击 + 新建连接 进入配置页面,只需配置:
名称:连接名称,如 MQTTX_Test;
服务器地址
端口:如 WebSockets 协议对应的 8083 端口
其他项目保持默认配置,你也可以根据具体业务场景修改。
MQTT协议是一种轻量级的、基于发布/订阅模式的通信协议,适用于物联网领域。emqx是一个基于Erlang语言开发的开源MQTT代理程序,它可以提供可扩展的、高性能的MQTT消息传输服务。在本文中,我们介绍了MQTT协议的基本原理,并演示了如何使用emqx搭建MQTT服务端和客户端。我们还介绍了如何在emqx服务端上配置ACL以保证MQTT通信的安全性。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。