一款轻量级的通信协议---MQTT (内含Linux环境搭建)

简介: **MQTT协议摘要**MQTT是一种轻量级的发布/订阅型网络协议,适用于低带宽、高延迟或不可靠的网络环境,尤其适合物联网(IoT)设备。其主要特点包括:1. **发布/订阅模型**:设备通过主题进行通信,发布者无需知道订阅者,订阅者也不需知道消息来源。2. **轻量级**:协议头部小,减少网络负载,适合资源受限的设备。3. **断线重连**:支持客户端在失去连接后重新连接,保持通信。4. **服务质量级别(QoS)**:提供0(最多一次)、1(至少一次)和2(恰好一次)三种级别,保证消息传递的可靠性。

MQTT

MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)是一种轻量级的发布/订阅(publish-subscribe)网络协议,它为低带宽和高延迟或不可靠的网络设计,非常适合物联网(IoT)设备之间的通信。MQTT协议基于TCP/IP协议栈,但在设计上特别注重低功耗和带宽优化,使其成为资源受限设备的理想选择。

MQTT的关键特点:

  1. 发布/订阅模型:MQTT使用主题(topic)的概念,允许设备订阅感兴趣的主题,并接收所有针对这些主题发布的消息。发送方(发布者)不需要知道谁是消息的接收者,接收方(订阅者)也不需要知道消息来自哪个发送方。
  2. 轻量级:MQTT协议的头部非常小,这使得它在网络条件不佳的环境下也能高效运行。此外,MQTT客户端可以最小化内存占用和网络流量。
  3. 断线重连:MQTT客户端可以在断线后自动尝试重新连接到服务器,确保即使在网络不稳定的情况下也能保持通信。
  4. 服务质量级别:MQTT提供了三个服务质量(QoS)级别,允许用户根据消息的重要性和网络条件选择合适的传输策略:
  • QoS 0:最多一次交付,消息可能丢失。
  • QoS 1:至少一次交付,确保消息至少被接收一次,但可能多次。
  • QoS 2:恰好一次交付,确保消息只被精确地接收一次。
  1. 保留消息:MQTT支持保留消息功能,即使在订阅者离线时,服务器也会保存最后一条消息,以便订阅者上线后立即收到。
  2. 小体积:MQTT协议的设计考虑到了资源受限的设备,其编码简单,减少了设备上的处理负载。

应用场景

1. 物联网(IoT)设备管理

MQTT广泛应用于家庭自动化、工业自动化、农业监控、智慧城市等领域。例如,智能灯泡、温湿度传感器、安防摄像头等设备可以通过MQTT协议与云平台或控制中心进行通信,实现远程监控和控制。

2. 实时数据流处理

MQTT可用于实时数据流的采集和传输,如实时股票市场数据、交通流量监控、健康监测设备的数据传输等,这些场景要求数据的实时性和准确性。

3. 移动应用与云同步

移动应用程序经常使用MQTT与后端服务器进行通信,尤其是在需要实时更新和通知的场景下,如聊天应用、实时位置共享、在线游戏等。

4. 车联网(V2X)通信

在车联网领域,车辆与车辆、车辆与基础设施之间的通信可以通过MQTT实现,用于实时交通状况更新、紧急情况广播、自动驾驶汽车的信息交换等。

image.gif 编辑

Linux环境搭建:

1. 安装mosquitto

这里推荐大家去用apt下载,如果没有网络的话在去源码编译下载,源码编译会遇到许多坑,例如老版本的一些mosquitto源码包可能需要老版本的openssl。

apt install mosquitto

image.gif

安装客户端

sudo apt install mosquitto-clients

image.gif

运行 mosquitto

mosquitto -v

image.gif

image.gif 编辑

此时就是运行成功的状态了。

2. Linux下客户端进行通信

 首先我们先订阅一个主题,别人往这个订阅的主题发消息我们就可以收到,现在订阅的是 bbxwg

mosquitto_sub -v -t bbxwg

image.gif

 我们现在往这个被订阅的主题发消息。

mosquitto_pub -t bbxwg-m woshidashuaige

image.gif

image.gif 编辑

3. PC端和Linux下进行通信

我们日常开发中大部分应该都会涉及到Linux和Windows之间的通信,MQTT也不例外。在PC端中有一个专门为MQTT制作的软件。

安装MQTT. fx

因为最新版本的软件需要Licence,所以这里为大家找到了一些免费的版本,链接如下。
百度网盘:
只有1.7的版本,无需许可证(推荐)
Windows版(64位) https://pan.baidu.com/s/13v0ROf1dOzu2tXqmw3iBMg 提取码:r9f7
Windows版(32位) https://pan.baidu.com/s/1kqbh3_43SYR7of0PZw9SGA 提取码:kf9t
苹果电脑mac os https://pan.baidu.com/s/1nfE6_sSbyq5USNphlpKqwA 提取码:pa6v

转载于:不会嵌入式的摆烂王

image.gif 编辑

4. MQTT.fx的使用

1. 点击连接

image.gif 编辑

2. 连接成功

image.gif 编辑

3. 订阅主题或者给别的主题发送消息

image.gif 编辑

到这里基本上就完成了MQTT基本上的一些通信。当然这只是MQTT比较简单的一种用法,它还可以被当成一种库在我编程中去使用,在次我就不多赘述了。

遇到的问题:

当我apt install下载了软件后,发现软件在运行的时候自动占用1883这个端口,导致我在开启的时候会提示端口已被占用

这时候需要我们去改一下他的一些配置文件。

vi /etc/mosquitto/mosquitto.conf

image.gif

加上下面 这两个配置,应该是将本身的端口号改一下,网上解释说是配置成无用户密码校验和无TLS连接。

listener 1883
allow_anonymous true

image.gif

image.gif 编辑

当然在编译中可能也会遇到很多的问题,首先应该是各种插件不存在,这个很好解决,我们可以去百度一下直接下载对应的插件就好,但是有的时候也会遇到openssl版本不对,需要老版本,这就就比较麻烦一些 。下面是我源码编译安装遇到的一些问题,希望可以帮助到大家。

image.gif


image.gif


image.gif

总结:

MQTT这款轻量级的通信协议我认非常适合那些性能低下的设备而准备的,也就是我们嵌入式中的一些硬件,这两者的契合度是非常大的。以上是本人的一些浅显的了解,如有错误还请指正。

相关实践学习
消息队列RocketMQ版:基础消息收发功能体验
本实验场景介绍消息队列RocketMQ版的基础消息收发功能,涵盖实例创建、Topic、Group资源创建以及消息收发体验等基础功能模块。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
相关文章
|
1月前
|
NoSQL 关系型数据库 Redis
mall在linux环境下的部署(基于Docker容器),Docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongo
mall在linux环境下的部署(基于Docker容器),docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongodb、minio详细教程,拉取镜像、运行容器
mall在linux环境下的部署(基于Docker容器),Docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongo
|
1月前
|
存储 安全 Linux
离线Linux服务器环境搭建
【9月更文挑战第3天】在离线环境下搭建Linux服务器需按以下步骤进行:首先确定服务器用途及需求,准备安装介质与所需软件包;接着安装Linux系统并配置网络;然后设置系统基础参数,如主机名与时区;安装必要软件并配置服务;最后进行安全设置,包括关闭非必要服务、配置防火墙、强化用户认证及定期备份数据。整个过程需确保软件包的完整性和兼容性。
|
10天前
|
消息中间件 Linux
linux之centos安装rabbitmq
linux之centos安装rabbitmq
|
10天前
|
编解码 Linux 开发工具
Linux平台x86_64|aarch64架构RTMP推送|轻量级RTSP服务模块集成说明
支持x64_64架构、aarch64架构(需要glibc-2.21及以上版本的Linux系统, 需要libX11.so.6, 需要GLib–2.0, 需安装 libstdc++.so.6.0.21、GLIBCXX_3.4.21、 CXXABI_1.3.9)。
|
2月前
|
消息中间件 Unix Linux
在Linux中,RabbitMQ是什么?
在Linux中,RabbitMQ是什么?
|
2月前
|
编解码 Linux 数据安全/隐私保护
Linux平台x86_64|aarch64架构如何实现轻量级RTSP服务
为满足在Linux平台(x86_64与aarch64架构)上实现轻量级RTSP服务的需求,我们开发了一套解决方案。该方案通过调用`start_rtsp_server()`函数启动RTSP服务,并设置端口号及认证信息。支持AAC音频和H.264视频编码,可推送纯音频、纯视频或音视频流。此外,还支持X11屏幕采集、部分V4L2摄像头采集、帧率/GOP/码率调整、摄像头设备选择与预览等功能。对于音频采集,支持alsa-lib和libpulse接口。整体设计旨在提供150-400ms的低延迟体验,适用于多种应用场景。
|
3月前
|
安全 Ubuntu Linux
6 个受欢迎且好用的轻量级Linux桌面环境
Linux被认为是最安全的系统,但这并不意味着它不受恶意软件或其他安全漏洞的侵害。Linux系统的使用范围非常广泛,因此防范潜在威胁至关重要。在这里,将探索 2024 年适用于 Linux 的最佳防病毒软件。根据评级、功能以及与其他 Linux 发行版的兼容性列出了十款最佳防病毒软件,内容仅供分享,不做其它用途。
1124 1
6 个受欢迎且好用的轻量级Linux桌面环境
|
3月前
|
消息中间件 Java Kafka
kafka Linux环境搭建安装及命令创建队列生产消费消息
kafka Linux环境搭建安装及命令创建队列生产消费消息
58 4
|
2月前
|
编解码 Linux 开发工具
Linux平台x86_64(麒麟|统信UOS)|aarch64(飞腾)如何实现摄像头|屏幕和麦克风|扬声器采集推送RTMP服务或轻量级RTSP服务
国产化操作系统的发展,减少了外部依赖,更符合国家安全标准,并可提升自主研发能力,促进产业链发展,满足定制开发能力,减少了外部技术封锁的风险,提高了国际竞争力,推动了产业升级。目前大牛直播SDK针对Linux平台x86_64架构和aarch64架构的RTMP推送模块和轻量级RTSP服务模块
|
4月前
|
消息中间件 物联网 Linux
Linux怎么安装czmq(物联网消息通讯轻量级消息队列)
Linux怎么安装czmq(物联网消息通讯轻量级消息队列)
40 8
下一篇
无影云桌面