【MQTT协议】使用c++实现mqtt协议(Mosquitto源码编译)

news2024/11/16 1:54:25

目录

    • MQTT协议简介
    • 发布/订阅模式简介
    • MQTT协议与发布/订阅模式的联系
    • 基于Mosquitto实现的MQTT服务器
    • Mosquitto安装

MQTT协议简介

MQTT(Message Queuing Telemetry Transport)是一种轻量级的、基于发布/订阅模式的消息传输协议,其最初由IBM开发,现已成为OASIS标准。MQTT协议常用于物联网领域,特别是在传输低带宽、高延迟、不稳定网络条件下的数据,例如传感器数据和遥测数据等。
MQTT协议的优点:

轻量级:MQTT协议的设计十分轻量级,其开销比较小,传输的数据包大小也比较小,这使得MQTT协议非常适合在低带宽、高延迟的网络环境下使用。

可靠性:MQTT协议支持三种服务质量等级(QoS),包括最多一次传输、至少一次传输、恰好一次传输,可以根据应用场景选择不同的服务质量等级来保证数据的可靠性。

灵活性:MQTT协议支持发布/订阅模式,可以让订阅者只订阅自己感兴趣的主题,这种灵活性使得MQTT协议非常适合在大量分布式设备的场景下使用。

易于实现和集成:MQTT协议的规范十分简单、清晰,易于实现和集成到各种不同的应用和系统中。

安全性:MQTT协议可以通过TLS/SSL协议进行加密传输,保证数据传输的安全性。
总之,MQTT协议是一种非常适合在物联网领域使用的协议,其优点在于轻量级、可靠性强、灵活性高、易于实现和安全性好等方面。

发布/订阅模式简介

发布/订阅(Publish/Subscribe)模式是一种消息传递模式,也叫做观察者模式。在这种模式中,消息发送者(发布者)将消息发送到一个或多个主题(Topic)中,而消息接收者(订阅者)则订阅一个或多个主题,接收这些主题中的消息。发布者和订阅者之间没有直接的联系,而是通过主题中介来进行通信。
发布/订阅模式可以用于解耦消息的发送和接收,使得系统中的不同模块之间可以进行松耦合的通信,从而提高系统的可扩展性和灵活性。例如,一个传感器网络中的传感器可以将采集到的数据发布到一个特定的主题中,而数据处理模块则可以订阅该主题,接收和处理这些数据。

发布/订阅模式适用于以下场景:

分布式系统:当系统中的不同模块分布在不同的节点中时,发布/订阅模式可以方便地实现模块之间的通信,而不需要关注节点间的具体实现方式。

实时数据处理:当需要处理高频率、实时产生的数据时,发布/订阅模式可以使得数据的发送和接收之间的延迟最小化,提高数据处理的效率。

事件驱动系统:当需要将事件和事件处理程序分离开来时,发布/订阅模式可以方便地实现事件的发布和订阅,同时也避免了事件处理程序之间的依赖。
总之,发布/订阅模式是一种非常适合解耦消息发送和接收的通信模式,可以提高系统的可扩展性和灵活性,适用于分布式系统、实时数据处理和事件驱动系统等场景。

MQTT协议与发布/订阅模式的联系

MQTT协议是一种基于发布/订阅(Publish/Subscribe)模式的通信协议。在MQTT中,客户端通过订阅主题(Topic)来接收消息,而通过发布消息到某个主题中来发送消息。
MQTT协议支持多个客户端同时订阅同一个主题,当有消息发布到该主题中时,所有订阅该主题的客户端都会收到该消息。这种发布/订阅的通信方式能够实现消息的异步传递,而且还能够支持消息的过滤和分发,从而可以实现更加灵活和高效的通信方式。
因此,MQTT协议和发布/订阅模式是密切相关的。MQTT协议的实现基于发布/订阅模式,而且MQTT协议也是发布/订阅模式的一种实现方式。MQTT协议的应用场景和发布/订阅模式的应用场景也非常相似,都适用于分布式系统、实时数据处理和事件驱动系统等场景。

基于Mosquitto实现的MQTT服务器

Mosquitto是一种轻量级的MQTT消息代理和服务器,由Eclipse Foundation开发和维护。Mosquitto支持MQTT协议3.1和3.1.1版本,可以在各种平台和系统上运行,包括Linux、Windows、macOS等。Mosquitto提供了基本的MQTT代理功能,如发布/订阅模式的消息传递、QoS消息传递、保持活动状态等,同时还提供了一些高级功能,如SSL/TLS加密、ACL访问控制、WebSockets支持等。
Mosquitto具有以下特点:

轻量级:Mosquitto是一个轻量级的MQTT代理和服务器,不会占用太多资源。

易于安装和配置:Mosquitto的安装和配置非常简单,可以快速部署和使用。

易于使用:Mosquitto提供了易于使用的命令行工具和MQTT库,方便用户进行MQTT通信测试和调试。

可扩展性:Mosquitto支持各种MQTT客户端和代理的集成,具有良好的可扩展性。

安全性:Mosquitto支持SSL/TLS加密和ACL访问控制,可以提高MQTT通信的安全性。
总之,Mosquitto是一个轻量级、易于使用、具有良好可扩展性和安全性的MQTT消息代理和服务器,适用于各种MQTT应用场景,如物联网、实时数据处理和事件驱动系统等。

在这里插入图片描述

Mosquitto安装

1.选择指定版本,在官网下载安装包并解压,链接:
[https://codeload.github.com/eclipse/mosquitto/zip/refs/tags/v2[git地址]
2.安装必要依赖库(这里是centos环境)openssl

yum install openssl openssl-devel

3.检测config.mk文件,为编译配置文件,默认自带cjson附加包。
对于具体安装目录:改为

prefix?=/usr/local/mosquitto

同时应事先创建此目录

mkdir /usr/local/mosquitto

此时继续安装cjson:
#从github下载cJSON代码

git clone https://github.com/DaveGamble/cJSON.git
cd cJSON
make
make install

安装后输出:

mkdir -p /usr/local/lib /usr/local/include/cjson
cp -a cJSON.h /usr/local/include/cjson
cp -a libcjson.so libcjson.so.1 libcjson.so.1.7.15 /usr/local/lib
cp -a cJSON_Utils.h /usr/local/include/cjson
cp -a libcjson_utils.so libcjson_utils.so.1 libcjson_utils.so.1.7.15 /usr/local/lib

由于采用了源码编译,需要安装:

  • xsltproc (only if building from git)
  • docbook-xsl (only if building from git)
    命令如下:
 yum  install libxslt
 yum  install  docbook-style-xsl

返回Mosquitto源码文件夹下,输入make命令进行编译:

make
make install

则在/usr/local/mosquitto安装目录下出现了:
bin include lib sbin share文件夹
对应的可执行命令所在目录为/usr/local/mosquitto/sbin/

/usr/local/mosquitto/sbin/mosquitto -h

可用下列命令启动mqtt服务器并指定端口:

mosquitto -p 9999

输出:

1681270517: Warning: Unable to drop privileges to 'mosquitto' because this user does not exist. Trying 'nobody' instead.
1681270517: mosquitto version 2.0.11 starting
1681270517: Using default config.
1681270517: Starting in local only mode. Connections will only be possible from clients running on this machine.
1681270517: Create a configuration file which defines a listener to allow remote access.
1681270517: For more details see https://mosquitto.org/documentation/authentication-methods/
1681270517: Opening ipv4 listen socket on port 9999.
1681270517: Opening ipv6 listen socket on port 9999.
1681270517: Error: Cannot assign requested address
1681270517: mosquitto version 2.0.11 running

再使用Mosquitto客户端编程实现mqtt协议客户端即可。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

(链表专题) 445. 两数相加 II ——【Leetcode每日一题】

445. 两数相加 II 给你两个 非空 链表来代表两个非负整数。数字最高位位于链表开始位置。它们的每个节点只存储一位数字。将这两数相加会返回一个新的链表。 你可以假设除了数字 0 之外,这两个数字都不会以零开头。 示例1: 输入:l1 [7,2,…

什么是时间复杂度和空间复杂度

什么是时间复杂度和空间复杂度 🍕博客主页:️自信不孤单 🍬文章专栏:数据结构与算法 🍚代码仓库:破浪晓梦 🍭欢迎关注:欢迎大家点赞收藏关注 文章目录什么是时间复杂度和空间复杂度1…

【服务器数据恢复】 EXT4文件系统下KVM虚拟机数据恢复案例

服务器数据恢复环境: Linux系统服务器,EXT4文件系统,部署KVM虚拟机。 服务器故障: 服务器上的KVM虚拟机被误操作删除,每台虚拟机包含一个qcow2格式的磁盘文件和一个raw格式的磁盘文件,需要恢复raw格式的磁…

大数据-玩转数据-oracle创建dblink及应用

一、创建DBLINK的应用场景 oracle在进行跨库访问时,可以通过创建dblink实现。 二、创建DBLINK应用场景 在tnsnames.ora中配置两个数据库别名:orcl(用户名:wangyong 密码:1988)、orcl2(用户名:wangyong 密码&#xf…

第5章 uniapp开发ImoocBlog

收获: 1.微信小程序 2.uni-app开发慕课热搜项目 3.构建企业级项目的编程思维 4.上线可商用的企业项目 第5章 uniapp开发ImoocBlog uniapp开发ImoocBlog 5-1:开篇 经过前面四个章节,我们已经完成了 微信小程序 的学习。那么从这一章开始我…

【微服务笔记10】微服务组件之Hystrix实现服务降级和服务熔断

这篇文章,主要介绍微服务组件之Hystrix实现服务降级和服务熔断。 目录 一、服务降级 1.1、什么是服务降级 1.2、实现服务降级 (1)引入依赖 (2)编写Service层代码 (3)编写Controller层代码…

CesiumForUnreal实现鹰眼地图(MiniMap)效果

文章目录 1.实现目标2.实现过程3.参考资料1.实现目标 基于CesiumForUnreal插件加载的在线地形和影像数据,使用Widget实现鹰眼小地图的效果,GIF动图如下: 2.实现过程 在UE开发中,常用的以Widget方法实现小地图的形式有两种。一种是动态的小地图,即地图的纹理图片会发生变化…

【Spark】RDD缓存机制

1. RDD缓存机制是什么? 把RDD的数据缓存起来,其他job可以从缓存中获取RDD数据而无需重复加工。 2. 如何对RDD进行缓存? 有两种方式,分别调用RDD的两个方法:persist 或 cache。 注意:调用这两个方法后并不…

腾讯云轻量服务器和云服务器区别对比(超详细全方位)

腾讯云轻量服务器和云服务器有什么区别?为什么轻量应用服务器费用更低?是因为轻量服务器CPU内存性能比云服务器CVM性能差吗?轻量应用服务器适合中小企业或个人开发者搭建企业官网、博客论坛、微信小程序或开发测试环境,云服务器CV…

Parcel 实践:轻松打包前端项目

结论 Parcel 是一个功能强大且易于使用的前端构建工具,它可以帮助您快速地构建 Web 项目。本文提供了关于如何开始使用 Parcel、配置和优化性能的实践方法。希望这些内容对您有所帮助! Parcel 是一个快速,零配置的 Web 应用打包工具。它的简单…

7nm舱泊一体SoC的新玩家

2016年,高通推出基于14纳米工艺的汽车座舱芯片骁龙820A,彼时,传统座舱SoC霸主NXP主推的是28纳米工艺的iMX8系列。不过,两款芯片都没有能够达到预期的量产效果。 真正的时代变革,来自于高通在2019年发布的全球首款量产7…

【产品设计】电商后台系统设计--订单管理

电商后台产品,涉及众多模块,而以商品、订单、库存,为核心模块,模块之间存在大量交互。订单较为重要,它记录了所有的交易数据 对电商公司来讲,最核心最难做的有三部分:商品、订单、库存。商品与店…

记一次中大规模数据库迁移过程,从MySql到PostgreSQL.

从MySql到PostgreSQL迁移的决策过程就不说了。我也是第一次用PostgreSQL,也没法说好不好。决策已经定了,下面介绍一下执行过程。 一、数据基本情况 服务器:4核CPU,8G内存,1T硬盘,8Mbit网速。 数据库&…

【建站】手把手教你搭建惊艳的博客

系列文章目录 第一章 手把手教你搭建自己的博客 文章目录系列文章目录前言一、网站软件的选择二、网站空间的选择1. 建议选择有名、大厂的2. 上手容易,丰富而详实的文档3. 要稳定,少出问题4. 及时处理并有能力处理问题三、 环境准备四、 安装PHP81. 首先…

sql知识点复习以及项目中的例子

常见的聚合函数: avg(),求平均值; sum() 求和; count(),计算和; min()求最小值; max&#xff…

ChatGPT想干掉开发人员,做梦去吧

很多人都发现ChatGPT可以做一些代码相关的工作,不仅可以写一些基础的类似python、java、js的代码段,还可以做一定量的调优,于是就开始担忧起来,到哪天我的开发工作会不会被ChatGPT这个工具给取代了? 目录 1. ChatGPT…

腾讯云轻量应用服务器镜像修改限制说明(必看)

腾讯云轻量应用服务器镜像可以更换或修改吗?可以!镜像可以修改,镜像是指轻量服务器的预装操作系统,轻量服务器创建成功后镜像也是可以更换的,如下图: 腾讯云轻量应用服务器镜像可以修改 目录 轻量服务器修…

计算机系统基本组成于基本功能

什么是计算机系统 计算机系统中的各个抽象层: C语言程序设计层 数据的机器级表示,运算语句和过程调用的机器级表示操作系统、编译和链接指令集体系架构(ISA)和汇编层 指令系统、机器代码,汇编语言微体系结构和硬件层 …

365天深度学习训练营-第J9周:Inception v3算法实战与解析

目录 一、前言 二、论文解读 1、Inception网络架构描述 2、Inception网络架构的优点 3、InceptionV3的改进 三、模型搭建 1、Inception-A 2、Inception-B 3、Inception-C 4、Reduction-A 5、Reduction-B 6、辅助分支 7、InceptionV3实现 一、前言 🍨 本…

ASP一个简单的网上教务系统模型的设计与实现

对于一个学校来说,大量教师信息,学生信息管理,学生成绩管理,基本数据的维护都难于通过传统的方法进行管理:这就迫切需要利用计算机技术来帮助学校管理者处理这些日常管理。本系统正是为了简化教学任务的管理&#xff0…