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

目录

MQTT

MQTT的关键特点:

应用场景

Linux环境搭建:

1. 安装mosquitto

2. Linux下客户端进行通信

3. PC端和Linux下进行通信

安装MQTT. fx

4. MQTT.fx的使用

1. 点击连接

​编辑

2. 连接成功

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

遇到的问题:

总结:


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:恰好一次交付,确保消息只被精确地接收一次。
  5. 保留消息:MQTT支持保留消息功能,即使在订阅者离线时,服务器也会保存最后一条消息,以便订阅者上线后立即收到。

  6. 小体积:MQTT协议的设计考虑到了资源受限的设备,其编码简单,减少了设备上的处理负载。

应用场景

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

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

2. 实时数据流处理

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

3. 移动应用与云同步

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

4. 车联网(V2X)通信

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

Linux环境搭建:

1. 安装mosquitto

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

apt install mosquitto

 安装客户端

sudo apt install mosquitto-clients

运行 mosquitto

mosquitto -v

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

2. Linux下客户端进行通信

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

mosquitto_sub -v -t bbxwg

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

mosquitto_pub -t bbxwg-m woshidashuaige 

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

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

4. MQTT.fx的使用

1. 点击连接
2. 连接成功

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

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

遇到的问题:

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

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

vi /etc/mosquitto/mosquitto.conf

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

listener 1883
allow_anonymous true 

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

总结:

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/756597.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Qt 5.14.2+Android环境搭建

1. 安装QT5.14.2的过程中,选中套件(kit) qt for android。 如果已经安装了qt creator但没有安装该套件,可以找到在qt安装目录下的MaintenanceTool.exe,运行该程序添加套件。 2. 安装jdk8,android sdk&…

2.1 大语言模型的训练过程 —— 《带你自学大语言模型》系列

《带你自学大语言模型》系列部分目录及计划,完整版目录见: 带你自学大语言模型系列 —— 前言 第一部分 走进大语言模型(科普向) 第一章 走进大语言模型1.1 从图灵机到GPT,人工智能经历了什么?1.2 如何让…

【全球首个开源AI数字人】DUIX数字人-打造你的AI伴侣!

目录 1. 引言1.1 数字人技术的发展背景1.2 DUIX数字人项目的开源意义1.3 DUIX数字人技术的独特价值1.4 本文目的与结构 2. DUIX数字人概述2.1 定义与核心概念2.2 硅基智能与DUIX的关系2.3 技术架构2.4 开源优势2.5 应用场景2.6 安全与合规性 3. DUIX数字人技术特点3.1 开源性与…

数据结构-分析期末选择题考点(图)

我是梦中传彩笔 欲书花叶寄朝云 目录 图的常见考点(一)图的概念题 图的常见考点(二)图的邻接矩阵、邻接表 图的常见考点(三)拓扑排序 图的常见考点(四)关键路径 图的常见考点&#x…

List接口, ArrayList Vector LinkedList

Collection接口的子接口 子类Vector,ArrayList,LinkedList 1.元素的添加顺序和取出顺序一致,且可重复 2.每个元素都有其对应的顺序索引 方法 在index 1 的位置插入一个对象,list.add(1,list2)获取指定index位置的元素&#…

【你也能从零基础学会网站开发】认识数据库和数据库中的基本概念

🚀 个人主页 极客小俊 ✍🏻 作者简介:程序猿、设计师、技术分享 🐋 希望大家多多支持, 我们一起学习和进步! 🏅 欢迎评论 ❤️点赞💬评论 📂收藏 📂加关注 学习目标 认识…

VMware ESXi 8.0U3 macOS Unlocker OEM BIOS 集成驱动版,新增 12 款 I219 网卡驱动

VMware ESXi 8.0U3 macOS Unlocker & OEM BIOS 集成驱动版,新增 12 款 I219 网卡驱动 VMware ESXi 8.0U3 macOS Unlocker & OEM BIOS 集成网卡驱动和 NVMe 驱动 (集成驱动版) 发布 ESXi 8.0U3 集成驱动版,在个人电脑上运行企业级工作负载 请访…

【51单片机入门】速通定时器

文章目录 前言定时器是什么初始化定时器初始化的大概步骤TMOD寄存器C/T寄存器 触发定时器中断是什么中断函数定时器点亮led 总结 前言 在嵌入式系统的开发中,定时器是一个非常重要的组成部分。它们可以用于产生精确的时间延迟,或者在特定的时间间隔内触…

Solr安装IK中文分词器

Solr安装IK中文分词器 如何安装Solr与导入数据?为什么要安装中文分词器下载与安装IK分词器1.1、下载IK分词器1.2、安装IK  第一步:非常简单,我们直接将在下的Ik分词器的jar包移动到以下文件夹中  第二步:修改Core文件夹名下\c…

linux的常用系统维护命令

1.ps显示某个时间点的程序运行情况 -a :显示所有用户的进程 -u :显示用户名和启动时间 -x :显示 没有控制终端的进程 -e :显示所有进程,包括没有控制终端的进程 -l :长格式显示 -w :宽…

什么是机器学习,机器学习与人工智能的区别是什么(一)?

人工智能和计算机游戏领域的先驱阿瑟塞缪尔(Arthur Samuel)创造了 "机器学习"一词。他将机器学习定义为 “一个让计算机无需明确编程即可学习的研究领域” 。通俗地说,机器学习(ML)可以解释为根据计算机的经…

从零开始搭建spring boot多模块项目

一、搭建父级模块 1、打开idea,选择file–new–project 2、选择Spring Initializr,选择相关java版本,点击“Next” 3、填写父级模块信息 选择/填写group、artifact、type、language、packaging(后面需要修改)、java version(后面需要修改成和第2步中版本一致)。点击“…

llamafactory-llama3微调中文数据集

一、定义 https://github.com/SmartFlowAI/Llama3-Tutorial/tree/main 基准模型测试opencompass 离线测评数据准备微调训练合并测试人工审核对比 二、实现 基准模型测试 基准模型 llama3-8b https://zhuanlan.zhihu.com/p/694818596? https://github.com/SmartFlowAI/Llam…

计算机网络知识整理笔记

目录 1.对网络协议的分层? 2.TCP/IP和UDP之间的区别? 3.建立TCP连接的三次握手? 4.断开TCP连接的四次挥手? 5.TCP协议如何保证可靠性传输? 6.什么是TCP的拥塞控制? 7.什么是HTTP协议? 8…

QGroundControl@Jetson Orin Nano - 从代码编译安装

QGroundControlJetson Orin Nano - Build from Source 1. 源由2. 步骤2.1 QT 编译2.1.1 下载2.1.2 版本2.1.3 初始化2.1.4 配置2.1.5 编译2.1.6 安装 2.2 QGC 编译2.2.1 下载2.2.2 版本2.2.3 初始化2.2.4 配置2.2.5 编译2.2.6 安装2.2.7 QT5命令备注 3. 可行方案4. 总结5. 补充…

CICD之Git版本管理及基本应用

CICD:持续集成,持续交付--让对应的资料,对应的项目流程更加规范--提高效率 CICD 有很多的工具 GIT就是其中之一 1.版本控制概念与环境搭建 GIT的概念: Git是一款分布式源代码管理工具(版本控制工具) ,一个协同的工具。 Git得其数据更像是一系列微型文件系统的快照。使用Git&am…

D : 合适的顺序

Description 给定 8 个数,如果将它们排成一列,每个数的权值是它与相邻的数之积,求一个排列方式,所有数的权值之和最大,输出该权值和. 例如 13242315 的权值和为 1∗33∗1∗22∗3∗44∗2∗22∗4∗33∗2∗11∗3∗55∗1…

libctk shared library的设计及编码实践记录

一、引言 1.1 <libctk>的由来 1.2 <libctk>的设计理论依据 1.3 <libctk>的设计理念 二、<libctk>的依赖库 三、<libctk>的目录说明 四、<libctk>的功能模块及使用实例说明 4.1 日志模块 4.2 mysql client模块 4.3 ftp client模块 4…

AVL树模拟

1.概念 虽然二叉搜索树可以缩短查找的效率&#xff0c;但如果数据有序或者接近有序时二叉搜索树树将退化为单支树&#xff0c;查找元素相当于在顺序表中搜索元素&#xff0c;效率低下。AVL 树是具有一下性质的二叉搜索树&#xff1a; 1.它的左右子树都是AVL树 2.左右子…

C++特殊类设计单例模式...

文章目录 请设计一个类&#xff0c;不能被拷贝请设计一个类&#xff0c;只能在堆上创建对象请设计一个类&#xff0c;只能在栈上创建对象请设计一个类&#xff0c;不能被继承请设计一个类&#xff0c;只能创建一个对象(单例模式)单例模式&#xff1a;饿汉模式&#xff1a;懒汉模…