mqtt概览

本文介绍了MQTT协议,一种轻量级的客户端-服务器消息发布/订阅协议,适用于物联网、M2M通信。重点讲解了其工作原理、应用场景、PahoMQTTC和mosquitto的相关工具,并提到了Qt模块QMqtt的使用方法。

mqtt

MQTT是一个基于客户端-服务器的消息发布/订阅传输协议。MQTT协议是轻量、简单、开放和易于实现的,这些特点使它适用范围非常广泛。在很多情况下,包括受限的环境中,如:机器与机器(M2M)通信和物联网(IoT)。MQTT协议广泛应用于物联网、移动互联网、智能硬件、车联网、电力能源等领域。

MQTT 与 HTTP 一样,MQTT 运行在传输控制协议/互联网协议 (TCP/IP) 堆栈之上,属于应用层协议。

  • 开放消息协议,简单易实现
  • 发布订阅模式,一对多消息发布
  • 基于TCP/IP网络连接,提供有序,无损,双向连接。
  • 1字节固定报头,2字节心跳报文,最小化传输开销和协议交换,有效减少网络流量。
  • 消息QoS支持,可靠传输保证

相关网址

对于开发者来说,只需要专注于mqtt的客户端开发即可,服务器开发轻量级测试使用有mosquitto即可。对于mqtt服务器则有专业的团队进行开发,或者企业进行服务器购买即可。大多数时候作为一个开发者并不需要研究协议细节,除非你想编写一个相关的协议库。
对于mqtt相关的库有Paho MQTT C && Paho MQTT C++ 及 QMqtt。

安装的话可以使用vcpkg或者自己从github拉取源码编译安装,需要注意Paho MQTT C++依赖于Paho MQTT C。如果你要编译Paho MQTT C++,则需要先编译Paho MQTT C。

MQTT使用的发布/订阅消息模式,它提供了一对多的消息分发机制,从而实现与应用程序的解耦。这是一种消息传递模式,消息不是直接从发送器发送到接收器(即点对点),而是由MQTT server(或称为 MQTT Broker)分发的。

客户端进行消息推送到代理服务器,然后代理服务器将消息分发给订阅该主题消息的客户端。

举个例子:空调设备订阅温度相关的主题,此时温度计温度发生了变化,温度计将温度的消息推送到服务器中,然后服务器将该消息分发给空调设备。空调设备检测到温度变化后,进行降温或者升温或关机等操作。

client --> puh payload  --> server --> sub topic client1  
                                   --> sub topic client2 

mosquitto
安装mosquitto软件之后,里面携带有mosquitto_sub.exe订阅客户端及mosquitto_pub.exe推送客户端。

启动mosquitt代理服务器之后,mosquitto_sub.exe可以订阅一个主题,mosquitto_pub.exe 可以推送一条消息到代理服务器。可以用来做为简单的MQTT测试。

mosquitto       // mqtt代理服务器
mosquitto_sub -t [topic name]   // 订阅一个主题
mosquitto_pub -t [topic name] -m [payload]      // 推送一个消息

QMqtt,属于Qt官方提供了模块,但编译需要去github去拉取下来,不过需要注意Qt版本,Qt6就拉Qt6的版本,Qt5就拉Qt5的版本。

QMqtt拉取指令

git clone https://github.com/qt/qtmqtt      // 拉取最新版本
git clone -b v5.15.2 --depth=1 https://github.com/qt/qtmqtt     // 拉取tag v5.15.2的版本,这个用于Qt5.15.2版本的Qt

基本上Qt的一些库模块,都需要用到perl。如果编译不过的话,基本上就是电脑上缺少perl这个软件,windows可以在这个网站下载 https://strawberryperl.com/

在windows的话,编译出来后需要使用vs的命令行执行 nmake install来安装qmqtt到qt的环境中去。

04-24
### MQTT 技术概览及其在 Java 中的实现 MQTT(Message Queuing Telemetry Transport)是一种轻量级的消息传输协议,专为低带宽、不可靠网络环境设计[^4]。它采用发布/订阅模型,使得设备能够高效地交换信息而无需复杂的点对点连接。 #### MQTT 的核心概念 - **Broker**: 负责接收来自客户端的所有消息并将它们分发给合适的订阅者。 - **Client**: 可以既是生产者也是消费者的角色;它可以向某个主题发布消息也可以从其他主题获取感兴趣的数据流。 - **Topic (主题)**: 类似于频道的概念,用于标识一类具体的信息类别以便分类处理接收到的内容。 - **Quality of Service(QoS)**: 定义了三种不同级别的服务标准来保证消息送达情况——至多一次(At most once),至少一次(At least once) 和 恰好一次(Exactly once)[^1]. #### 在 Java 中使用 MQTT 正如之前提到过的,Eclipse Paho 是目前最为广泛使用的 Java 平台下的 MQTT 库之一[^3]. 下面我们将进一步探讨有关此库的一些高级特性以及最佳实践. ##### 高级特性和配置选项 除了基本的功能外,Paho 还提供了许多额外的能力帮助开发者构建更加强大稳定的应用程序: - **持久化会话**(Persistent Sessions): 当设置 `cleanSession` 参数为 false 时,即使断开重连之后仍然能继续接收先前未读取的通知. - **最后遗嘱机制**(Last Will Testament,LWT): 允许定义当异常终止前应该广播出去的一条特殊通知. - **心跳检测保持活动状态**(Keep Alive Interval): 设置定期发送 ping 请求的时间间隔从而维持长期有效的链接关系. 下面是关于这些功能的一个综合实例演示: ```java // 创建一个具有持久化的MqttClient对象 MemoryPersistence persistence = new MemoryPersistence(); MqttClient client = new MqttClient("tcp://broker.example.com", clientId, persistence); // 设置LWT参数 client.setWill("status/" + clientId, "offline".getBytes(), 2, true); // 建立连接的同时指定keepAlive时间 MqttConnectOptions connOpts = new MqttConnectOptions(); connOpts.setCleanSession(false); connOpts.setKeepAliveInterval(60); // 单位秒数 client.connect(connOpts); ``` 此外还有诸如自动重新连接等功能可以帮助提高系统的健壮性[^2]. --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值