第三方库介绍——mosquitto

news2025/1/11 14:54:23

文章目录

  • 概述
  • 程序(指令)说明
  • 安装服务端与客户端
  • 服务端指令
  • 配置
    • 配置文件:mosquitto.conf
    • 认证配置:pwfile
    • 权限配置:aclfile
    • 启动服务器,选择配置文件:mosquitto.conf
  • 测试
    • 发布指令:
    • 订阅指令:
    • 订阅客户端存活连接数:
  • 介绍mosquitto命令
    • 命令格式:
    • 启动服务器:
    • 关闭服务器:
  • 介绍mosquitto_sub与mosquitto_pub 命令
    • mosquitto_sub
    • mosquitto_pub
  • MQTT的一些介绍
    • 概述
    • MQTT消息
  • mosquitto源码的介绍

概述

  • mosquitto是一款开源的MQTT消息代理(服务器)软件,实现了MQTT协议版本3.1和3.1.1,提供轻量级的,支持可发布/可订阅的的消息推送模式,使设备对设备之间的短消息通信变得简单,比如现在应用广泛的低功耗传感器,手机、嵌入式计算机、微型控制器等移动设备
  • Mosquitto项目还提供了用于实现MQTT客户端的C库以及非常受欢迎的mosquitto_pub和mosquitto_sub命令行MQTT客户端。

程序(指令)说明

  • 1)mosquitto:代理器主程序

  • 2)mosquitto.conf:配置文件【路径:/etc/mosquitto】

  • 3)mosquitto_passwd:用户密码管理工具

  • 4)mosquitto_pub:用于发布消息的命令行客户端

  • 5)mosquitto_sub:用于订阅消息的命令行客户端

  • 6)mqtt:MQTT的后台进程

  • 7)libmosquitto:客户端编译的库文件

安装服务端与客户端

同时安装服务端mosquitto和客户端mosquitto-clients

sudo apt-get install mosquitto
sudo apt-get install mosquitto-clients

服务端指令

1)查看状态

sudo service mosquitto status

2)启动服务器

sudo service mosquitto start

3)关闭服务器

sudo service mosquitto stop

配置

配置文件:mosquitto.conf

进入/etc/mosquitto目录,找到mosquitto.conf文件

原文件内容:

在这里插入图片描述

在最后增加三句话,如下:

pid_file /var/run/mosquitto.pid

# 消息持久存储
persistence true
persistence_location /var/lib/mosquitto/

# 日志文件
log_dest file /var/log/mosquitto/mosquitto.log

# 其他配置
include_dir /etc/mosquitto/conf.d

# 禁止匿名访问
allow_anonymous false
# 认证配置,即登录账号信息的文件
password_file /etc/mosquitto/pwfile
# 权限配置
acl_file /etc/mosquitto/aclfile
# 监听的端口
# listener 1883

认证配置:pwfile

命令格式:

sudo mosquitto_passwd -c /etc/mosquitto/passwd username
  • -c 会生成密码文件,不加-c 代表已有文件,只增加用户,第二次配置不需要输入-c
  • passwd :指定密码文件
  • username :指定配置的用户名

由于没有密码文件,创建pwfile文件:

sudo touch /etc/mosquitto/pwfile

首先保证服务开启,然后输入如下命令,根据提示输入两遍密码:

sudo mosquitto_passwd /etc/mosquitto/pwfile 用户名

此时,pwfile文件就会生成用户名和密码

权限配置:aclfile

创建文件

sudo vim /etc/mosquitto/aclfile

编辑内容

# 李雷只能发布以test为前缀的主题,订阅以$SYS开头的主题即系统主题user lileitopic write test/#topic read $SYS/## 韩梅梅只能订阅以test为前缀的主题user hanmeimeitopic read test/#

启动服务器,选择配置文件:mosquitto.conf

mosquitto -c /etc/mosquitto/mosquitto.conf -d

-c:指定特定配置文件启动
-d:后台运行

测试

发布使用mosquitto_pub命令,订阅使用mosquitto_sub命令。常用参数介绍:

在这里插入图片描述

发布指令:

mosquitto_pub -h localhost -t "test/abc" -u book -P root -i "client2" -m "good,successfull"

订阅指令:

mosquitto_sub -h localhost -t "test/#" -u hanmeimei -P root -i "client1"

订阅客户端存活连接数:

mosquitto_sub -h localhost -t '$SYS/broker/clients/active' -u book -P root -i "client2"

参考博文:Mosquitto 介绍和简单使用

介绍mosquitto命令

通过mosquitto程序指令启动服务器,通过杀死进程方式,关闭服务器。

命令格式:

mosquitto [-c config file] [ -d | --daemon ] [-p port number] [-v]

参数说明:

  • -c 启动mosquitto可以调整的参数,配置文件
  • -d 表示MQTT mosquitto将在后台运行。
  • -p 代表当前的mosquitto服务实例启动以后,其监听端口号
  • -v 代码调试模式(verbose)

启动服务器:

mosquitto -c /etc/mosquitto/mosquitto.conf -d

关闭服务器:

# 查看mosquitto服务进程ID
ps -aux | grep mosquitto
 
# 杀掉服务进程
# PID 为上一步查找的ID
kill -9 PID
 
# 杀掉后,如果进程自动启动,
# 修改mosquitto.conf文件后缀为其他名称即可。

介绍mosquitto_sub与mosquitto_pub 命令

mosquitto_sub

在这里插入图片描述

mosquitto_pub

在这里插入图片描述
参考博文:mosquitto简介和使用

MQTT的一些介绍

概述

  • MQTT 协议全称是 Message Queuing Telemetry Transport,翻译过来就是消息队列遥测传输协议,它是物联网常用的应用层协议,运行在 TCP/IP 中的应用层中,依赖 TCP 协议,因此它具有非常高的可靠性,同时它是 基于TCP 协议的<客户端-服务器>模型发布/订阅主题消息的轻量级协议

在这里插入图片描述

  • MQTT协议是基于客户端-服务器模型,在协议中主要有三种身份:发布者(Publisher)、服务器(Broker) 以及订阅者(Subscriber)。 并且消息发布者可以同时是订阅者 。

  • MQTT 消息的发布者和订阅者都是客户端服务器只是作为一个中转的存在,将发布者发布的消息进行转发给所有订阅该主题的订阅者。

  • MQTT 客户端的功能:

    • 发布消息给其它相关的客户端。
      -订阅主题请求接收相关的应用消息。
    • 取消订阅主题请求移除接收应用消息。
    • 从服务端终止连接。
  • MQTT 服务器常被称为 Broker(消息代理) 。它的功能有:

    • 接受来自客户端的网络连接请求。
    • 接受客户端发布的应用消息。
    • 处理客户端的订阅和取消订阅请求。
    • 转发应用消息给符合条件的已订阅客户端(包括发布者自身)。

MQTT消息

  • MQTT所发的消息包含:主题+内容,客户端可以订阅任意主题,若有其它客户端发布主题时符合所订阅的主题,就会由网关发送到客户端。

主题:

  • MQTT 服务器为每个连接的客户端(订阅者)添加一个标签,该标签与服务器中的所有订阅相匹配, 服务器会将消息转发给与标签相匹配的每个客户端。这样的一个标签就是主题。

服务质量

  • MQTT提供三种服务质量(Quality of Service,简写QoS),供开发者根据不同的情景选择不同的服务级别:

    • QoS0:最多发送一次消息,在消息发送出去后,接收者不会发送回应,发送者也不会重发消息。

    • QoS1:最少发送一次消息(消息最少需要送达一次,也有可送达多次), QoS 1的 PUBLISH 报文的可变报头中包含一个报文标识符,需要 PUBACK 报文确认。

    • QoS2:这是最高等级的服务质量,消息丢失和重复都是不可接受的。只不过使用这个服务质量等级会有额外的开销,这个等级常用于支付中,因为支付是必须有且仅有一次成功,总不能没给钱或者给了多次钱吧。

mosquitto源码的介绍

  • github地址:https://github.com/eclipse/mosquitto

下载源码:

git clone https://github.com/eclipse/mosquitto.git

依次输入如下命令编译:

cd mosquitto/
mkdir build && cd build
cmake ..
make

编译报错1:

/bin/sh: 1: xsltproc: not found
man/CMakeFiles/mosquitto_sub.1.dir/build.make:60: recipe for target '../man/mosquitto_sub.1' failed

解决方法:

sudo apt-get install -y xsltproc

编译报错2:

warning: failed to load external entity "http://docbook.sourceforge.net/release/xsl/current/html/docbook.xsl"
compilation error: file http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl line 9 element import
xsl:import : unable to load http://docbook.sourceforge.net/release/xsl/current/html/docbook.xsl:

解决方法:

sudo apt-get install docbook-xsl docbook-xml

编译成功,此时build目录下的client文件夹与src文件夹下会生成一些可执行文件:
在这里插入图片描述

  • 其中mosquitto是服务器软件(本地代理),mosquitto_pub是发布者客户端,mosquitto_sub订阅者客户端。
  • mosquitto_pub对应的源文件为mosquitto/client/pub_client.c,mosquitto_sub对应的源文件为mosquitto/client/sub_client.c

如果需要应用于我们嵌入式Linux中的进程间通信,需要使用交叉编译器编译出一个可运行在我们的arm板上的mosquitto服务器。交叉编译待更新

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

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

相关文章

基于立创EDA的原理图设计进阶(实战开发一个小项目)

目录 学习目标 原理图设计进阶——空气质量检测仪 项目需求 1、功能性需求分析 2、非功能性需求 硬件框架图 元器件选型 MCU sensor LCD WIFI KEY PWOER 原理图设计 元件PCB封装设计-DIP&#xff0c;SOP 理论知识 直插式 贴片式 学习目标 1、熟悉电子产品设…

网络编程详细讲解

网络编程 网络通信 网络 ip 地址 1.概念&#xff1a;用于唯一标识网络中的每台计算机/主机 2.查看ip地址&#xff1a;ipconfig 3.ip地址的表示形式&#xff1a;点分十进制XX.XX.XX.XX 4.每一个十进制数的范围&#xff1a;0~255 5.ip地址的组成网络地址主机地址&#xff0…

团体程序设计天梯赛-练习集L2篇①

&#x1f680;欢迎来到本文&#x1f680; &#x1f349;个人简介&#xff1a;Hello大家好呀&#xff0c;我是陈童学&#xff0c;一个与你一样正在慢慢前行的普通人。 &#x1f3c0;个人主页&#xff1a;陈童学哦CSDN &#x1f4a1;所属专栏&#xff1a;PTA &#x1f381;希望各…

Python3学习之列表

目录 1.访问列表中的值 2.更新列表 3.删除列表元素 4.Python列表脚本操作符 5.Python列表截取与拼接 6.嵌套列表 7.列表比较 8.Python列表函数&方法 序列是 Python 中最基本的数据结构。序列中的每个值都有对应的位置值&#xff0c;称之为索引&#xff0c;第一个索…

Go语言doc

1、Go语言doc go doc 命令可以打印附于 Go 语言程序实体上的文档&#xff0c;我们可以通过把程序实体的标识符作为该命令的参数来 达到查看其文档的目的。 所谓Go语言的程序实体&#xff0c;是指变量、常量、函数、结构体以及接口&#xff0c;而程序实体的标识符即是代表它们…

JDBC 和数据库连接

JDBC 和数据库连接 基本介绍 JDBC为访问不同的数据库提供了统一的接口&#xff0c;为使用者屏蔽了细节问题。Java程序员使用JDBC&#xff0c;可以连接任何提供了JDBC驱动程序的数据库系统&#xff0c;从而完成对数据库的各种操作。JDBC的基本原理图&#xff3b;重要&#xff…

CSDN 个性化推荐系统的设计和演进

个性化推荐项目 个性化推荐的设计和演进项目概览项目梳理依赖管理实现代码的重构和改进持续演化 个性化推荐的设计和演进 CSDN 的个性化推荐系统&#xff0c;是从既有的推荐项目中剥离出来的一个子项目&#xff0c;这个项目随后移交到了我们AI组。在近一年的时间内&#xff0c…

机器学习实战|第5周|第3章:无监督学习与数据预处理|3.3降维|16:00~17:55

目录 一、降维的动机 (1)数据压缩 (2)数据可视化 (3)降维的弊端 二、什么是维度的诅咒&#xff1f; 三、数据集被降维后能否逆转 四、降维的主要方法 (1)投影 (2)流形学习 五、PCA PCA可以用来给高度非线性数据集降维吗&#xff1f; 假设在一个1000维数据集上执行P…

最优化理论中的惩罚函数法:概念、推导和应用

目录 1. 引言 2. 惩罚函数法的概念 2.1 惩罚函数法的基本思想 2.2 惩罚函数的定义 2.2.1 符号性质 2.2.2 惩罚性质 2.2.3 连续性质 2.3 惩罚函数法的推导 2.4 惩罚函数法的特点 2.4.1 灵活性 2.4.2 通用性 2.4.3 近似解 2.4.4 收敛性 3. 推导过程 3.1 问题建模 …

Redis实战案例6-缓存穿透及其解决案例

1. 缓存穿透 缓存穿透是指在缓存中查找一个不存在的值&#xff0c;由于缓存一般不会存储这种无效的数据&#xff0c;所以每次查询都会落到数据库上&#xff0c;导致数据库压力增大&#xff0c;严重时可能会导致数据库宕机。 解决方案&#xff1a; 方法一&#xff1a;缓存空对象…

【Python】异常处理 ② ( 捕获所有类型的异常 | 默认捕获所有类型异常 | 捕获 Exception 异常 )

文章目录 一、Python 默认捕获所有类型异常1、默认捕获所有类型异常 - 无法获取异常类型2、代码实例 - 默认捕获所有类型异常 二、Python 捕获所有类型异常 - 捕获 Exception 异常1、捕获 Exception 类型异常 - 可获取异常类型2、代码实例 - 捕获 Exception 异常 一、Python 默…

猴子都能听懂的 从 0 到 1 设计一个网络

标题开玩笑了哈&#xff0c;大家不要介意&#xff0c;就是说本文真的超级大白话&#xff01; 话不多说&#xff0c;开始整活&#xff01; 你很爱玩电脑游戏&#xff0c;你买了一台电脑&#xff0c;就一个人自己玩&#xff0c;也不需要和谁沟通&#xff0c;不需要与别人联机&am…

数据库判断分解的无损连接性

例题 关系模式R&#xff08;ABCDE&#xff09;&#xff0c;F{A->C,C->D,B->C,DE->C,CE->A} 若分解成R1(AD)R2(AB)R3(BC)R4(CDE)R5(AE)判断是否具有无损连接性 画出如下表格如第一行&#xff1a;AD&#xff0c;那么在A&#xff0c;D的地方填入&#xff0c;i表…

C++ Primer 第9章顺序容器

9.1 顺序容器概述 确定使用哪种顺序容器 通常使用vector是最好的选择 9.2 容器库概述(本节所有容器均适用) 对容器可以保存的元素类型的限制 有些类没有提供默认构造函数,我们可以定义一个这种类型对象的容器,但我们在构造这种容器时不能只传递给它一个数目参数. 9.2.1 迭…

MySQL进阶SQL语句(二)

MySQL进阶SQL语句&#xff08;二&#xff09; 一、MySQL进阶SQL语句1.1 连接查询1.2 CREATE VIEW视图&#xff0c;可以被当作是虚拟表或存储查询1.3 UNION 联集1.4 CASE1.5 空值(NULL) 和 无值() 的区别1.6 正则表达式 二、存储过程2.1 存储过程定义2.2 存储过程的优点2.3 存储…

(秋招)闭环检测流程回顾

vins中的闭环检测和重定位 回环检测的关键就是如何有效检测出相机曾经经过同一个地方&#xff0c;这样可以避免较大的累积误差&#xff0c;使得当前帧和之前的某一帧迅速建立约束&#xff0c;形成新的较小的累积误差。由于回环检测提供了当前数据与所有历史数据的关联&#xf…

快速搭建node.js新项目和大事件后台项目

声明&#xff1a;参考https://zhuanlan.zhihu.com/p/464271490?utm_id0 参考&#xff1a;https://brucecai55520.gitee.io/bruceblog/notes/nodejs/ev_api_server.html#_1-4-%E5%88%9D%E5%A7%8B%E5%8C%96%E8%B7%AF%E7%94%B1%E7%9B%B8%E5%85%B3%E7%9A%84%E6%96%87%E4%BB%B6%E5…

Linux文件系统的缓冲区问题

目录 一.什么是缓冲区&#xff1f; 1.1实验案例1&#xff1a; 情况1&#xff1a;运行该程序 情况2&#xff1a;此时我将该程序运行的结果输出重定向到一个文本文件中&#xff1a; 二.为什么要有缓冲区&#xff1f; 于是引出了缓冲区的刷新策略&#xff1a; 三.缓冲区在哪…

【学习笔记】 科目一之计算题篇

【学习笔记】 科目一之计算题篇 三点估算PERT 三点估算期望:(悲观+4*最可能+乐观)/6三点估算标准差:(悲观-乐观)/6正态分布四个数:34.1%,13.65%,2.1%,0.15%决策树 分叉计算注意:成本越小越好投资回报:收益-投入投资回报率(ROI)=收益-投入/投入投资回收期 静态回…

算法--PageRank

概念 PageRank是Google提出的算法&#xff0c;用于衡量特定网页相对于搜索引擎索引中的其他网页而言的重要程度。是Google创始人拉里佩奇和谢尔盖布林于1997年创造的PageRank实现了将链接价值概念作为排名因素。 GOOGLE PageRank并不是唯一的链接相关的排名算法&#xff0c;而…