【一文学会MQTT协议和mosquitto】

news2024/11/19 2:44:45

一文学会MQTT协议和mosquitto

  • 一.、MQTT的基本概念
  • 二、mosquitto
    • mosquitto基本概念
    • 常用API
  • 三、MQTT测试
    • EMQX

一.、MQTT的基本概念

MQTT是一种基于发布/订阅模式的协议,其中发布者发布消息,订阅者订阅感兴趣的主题(topic),并接收发布者发布的消息。

  1. 客户端(Client)
    MQTT协议中的客户端是指与MQTT服务器建立连接并进行消息传输的设备或程序。客户端可以是发布者(Publisher)、订阅者(Subscriber)或同时兼具发布者和订阅者的设备或程序。

  2. 服务器(Broker)
    MQTT协议中的服务器是指接受客户端连接并进行消息转发的中间件。服务器可以接受来自不同客户端的消息,并将其分发给对应的订阅者或存储在消息队列中等待订阅者连接后接收。

  3. 消息主题(Topic)
    MQTT协议中的消息主题是用于标识消息类型或消息内容的字符串,消息发布者可以将消息发布到一个或多个主题上,订阅者可以订阅一个或多个主题,接收相关的消息。

  4. QoS(Quality of Service)
    MQTT协议中的QoS是指消息传输的服务质量等级,它有三个级别:
    QoS0:最多发送一次,不保证消息到达。
    QoS1:至少发送一次,确保消息到达,但可能会重复。
    QoS2:只发送一次,确保消息到达且不重复。

  5. 连接(Connection)
    MQTT协议中的连接是指客户端与服务器之间建立的TCP连接,通过连接可以进行消息传输和状态交互。

  6. 会话(Session)
    MQTT协议中的会话是指客户端与服务器之间的通信状态,包括连接状态、订阅状态、QoS等级等。会话可以是持久的,也可以是短暂的。

  7. 消息保留(Retained Message)
    MQTT协议中的消息保留是指发布者发布的消息可以保留在服务器上,直到订阅者连接后才发送给订阅者。保留的消息可以覆盖旧的消息,也可以保留多个版本。
    在这里插入图片描述

二、mosquitto

mosquitto基本概念

一款实现了消息推送协议 MQTT的开源消息代理软件,提供轻量级的,支持可发布/可订阅的的消息推送模式,使设备对设备之间的短消息通信变得简单,比如现在应用广泛的低功耗传感器,手机、嵌入式计算机、微型控制器等移动设备。

常用API

①struct mosquitto *mosquitto_new(const char *id, bool clean_session, void *userdata);
该函数用于创建一个新的Mosquitto实例,并返回指向该实例的指针。可以使用该实例来连接到MQTT代理服务器、订阅主题、发布消息等。
②int mosquitto_connect(struct mosquitto *mosq, const char *host, int port, int keepalive);
该函数用于连接到MQTT代理服务器。需要传递MQTT代理服务器的地址和端口号,以及可选的用户名和密码。还可以设置MQTT选项,例如保持连接的间隔、遗嘱消息等。
③int mosquitto_disconnect(struct mosquitto *mosq);
该函数用于断开与MQTT代理服务器的连接。
④int mosquitto_publish(struct mosquitto *mosq, int *mid, const char *topic, int payloadlen, const void *payload, int qos, bool retain);
该函数用于向MQTT代理服务器发布一条消息。需要传递Mosquitto实例的指针、消息的主题、消息的内容、消息的长度以及可选的QoS等级、保留标志。
⑤int mosquitto_subscribe(struct mosquitto *mosq, int *mid, const char *sub, int qos);
该函数用于订阅一个或多个主题。需要传递Mosquitto实例的指针、主题字符串、可选的QoS等级。
⑥int mosquitto_unsubscribe(struct mosquitto *mosq, int *mid, const char *sub);
该函数用于取消订阅一个或多个主题。需要传递Mosquitto实例的指针和主题。
⑦void mosquitto_connect_callback_set(struct mosquitto * mosq, void (*on_connect)(struct mosquitto *mosq, void *obj, int rc) )函数用于MQTT协议中,在客户端成功连接到MQTT代理时设置回调函数。
⑧void mosquitto_message_callback_set( struct mosquitto * mosq, void (*on_message)(struct mosquitto *, void *, const struct mosquitto_message *) )
函数是 MQTT 协议中用于设置消息接收回调函数的函数。当客户端接收到订阅主题的消息时,回调函数将被调用,可以用于处理收到的消息。
⑨mosquitto_publish_callback_set() 函数是 MQTT 协议中用于设置消息发布回调函数的函数。当客户端成功地将消息发布到代理时,回调函数将被调用,可以用于处理发布的确认消息。
⑩mosquitto_disconnect_callback_set() 函数是 MQTT 协议中用于设置断开连接回调函数的函数。当客户端与代理断开连接时,回调函数将被调用,可以用于处理断开连接的情况。

三、MQTT测试

EMQX

1、需要进入到解压缩文件夹下的bin里
打开cmd窗口后输入 :emqx start回车
emqx-5.0.6-windows-amd64\bin>emqx start
关闭服务器输入 :emqx stop
用浏览器打开http://127.0.0.1:18083/即可看到后台管理页面,默认用户名/密码为admin/public
在这里插入图片描述

2、MQTTX连接EMQX
新建连接,填写相关信息
在这里插入图片描述

3、开发板连接EMQX
修改mqtt config信息,
在这里插入图片描述

重启配置
这个配置文件是针对mosquitto的一个bridge(桥接器)进行配置的。bridge用于连接两个不同的MQTT Broker,使得两个Broker之间可以进行消息的交换。

  • user root:表示启动mosquitto的用户是root。
  • connection ODU:表示该bridge的名称为ODU。
  • address 169.254.252.100:1883:表示要连接的目标MQTT Broker的地址为169.254.252.100:1883。
  • restart_timeout 5:表示重启bridge的超时时间为5秒。
  • topic:表示该bridge所要处理的消息的主题。
  • out:表示该bridge要发布的消息,即允许哪些主题可以发布消息到目标MQTT Broker。
  • in:表示该bridge要订阅的消息,即允许哪些主题的消息可以被订阅到本地MQTT Broker。
  • listener:表示要监听的端口和IP地址,这里是监听1883端口,IP地址为169.254.251.1。
  • allow_anonymous true:表示允许匿名用户连接到该MQTT Broker。
  • log_dest file /var/log/mosquitto.log:表示将日志输出到文件/var/log/mosquitto.log中。

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

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

相关文章

QGIS--开发OpenSCENARIO动态场景(二)--安装插件

1.下载并安装ad_map(无需构建): 1)ad_map插件: https://github.com/carla-simulator/map/releases 下载第一个:ad_map_access_qgis.zip 2)导入插件: 从MenuBar的Plugins >…

YOLOv8 更换主干网络之 FasterNet

论文地址:https://export.arxiv.org/pdf/2303.03667v1.pdf 为了设计快速神经网络,许多工作都集中在减少浮点运算(FLOPs)的数量上。然而,作者观察到FLOPs的这种减少不一定会带来延迟的类似程度的减少。这主要源于每秒低浮点运算(FLOPS)效率低下。并且,如此低的FLOPS主要…

ThreadLocal InheritableThreadLocal TransmittableThreadLocal的使用以及原理

ThreadLocal 每个线程向ThreadLocal设置值&#xff0c;再取值&#xff0c;实现线程之间的隔离 public class ThreadLocalCase1 {private static ThreadLocal<Integer> threadLocal new ThreadLocal<>();public static void main(String[] args) {Random random …

Postman接口与压力测试实例

Postman是一款功能强大的网页调试与发送网页HTTP请求的Chrome插件。它提供功能强大的 Web API & HTTP 请求调试。 1、环境变量和全局变量设置 环境变量可以使用在以下地方&#xff1a; URLURL paramsHeader valuesform-data/url-encoded valuesRaw body contentHelper f…

MySQL学习笔记第一天

第02章 MySQL环境搭建 1.MySQL的卸载 步骤1&#xff1a;停止MySQL服务 在卸载之前&#xff0c;先停止MySQL8.0的服务。按键盘上的“Ctrl Alt Delete”组合键&#xff0c;打开“任务管理器”对话框&#xff0c;可以在“服务”列表找到“MySQL8.0”的服务&#xff0c;如果现…

AIGC: Midjourney和Stable Diffusion在大厂中的应用

AIGC: Midjourney和Stable Diffusion在大厂中的应用和教程​http://www.webhub123.com/#/home/detail?projectHashid51631966&ownerUserid21336964 收录效果如下 登录后即可一键拥挤收藏以下所有文章网址到我的收藏夹&#xff0c;网站帮你简单高效地管理你的网络收藏&…

Memtiter-benchmark源码解析4memtier_benchmark.cpp源代码解读

run_benchmark 程序入口 First , create the cg_thread instances in the vector threads and then call each cg_thread’s prepare() function of them. Subsequently, launch each thread in the vector threads cg_thread m_base event_base_new() // line 528 一个cli…

移动端手机网页适配iPad与折叠屏设备

采用的网页适配方案&#xff1a;移动端页面px布局适配方案&#xff08;viewport&#xff09; 产生此问题的原因 由于手机与平板等设备宽高比差异导致页面展示不全或者功能按钮展示在视口之外点击不到。 简单来说就是我们的页面都是瘦长(即高大于宽)的&#xff0c;而折叠屏等设…

【计算机专业应届生先找培训还是先找个工作过渡一下?】

计算机专业应届生先找培训还是先找个工作过渡一下&#xff1f; 计算机应届生是先培训还是先工作&#xff0c;这个问题应该困扰了很多专业技能一般的同学&#xff0c;尤其是学历方面还没有优势的普通本专科院校。都说技术与学历优秀的人进大厂&#xff0c;技术一般学历优秀的人能…

@ComponentScan自动扫描组件并指定扫描规则

1.使用注解配置包扫描 1.1.创建相关类 分别创建BookDao、BookService、BookServiceImpl以及BookController这三个类&#xff0c;并在这三个类中分别添加Repository、Service、Controller注解 BookDaopackage com.tianxia.springannotation.dao;import org.springframework.s…

【社区图书馆】如何唤醒数学脑

如何唤醒数学脑 内容简介 每个人天生都有数学力&#xff0c;有着内建的“数学式思维模式”&#xff0c;若能有效发挥&#xff0c;就能在学校、职场、人际关系中表现出来&#xff0c;从容不迫地获得更好的效率及成就感。 但这种思维模式会受到周围情境、心理状态等因素的影响&…

思必驰闯关科创板:对标科大讯飞,发展阶段落后逾10年

4月17日&#xff0c;人机对话解决方案提供商——思必驰科技股份有限公司&#xff08;下称“思必驰”&#xff09;已更新提交相关财务资料&#xff0c;根据相关规定&#xff0c;上交所恢复了其发行上市审核。 2022年7月15日&#xff0c;思必驰向科创板递交IPO申请。今年3月底&am…

贵金属期货交易平台排行榜是真的还是假的?如何选择?

贵金属期货交易是一种非常常见的投资形式&#xff0c;其市场容量非常大&#xff0c;因此有各种各样的期货交易平台。这导致许多投资者不知道如何选择这些平台。对于投资者来说&#xff0c;只有选择一个高质量的期货交易平台&#xff0c;他们才能更好地进行后续的交易。如何选择…

BloomFilter在Drois中的应用

1.简介&#xff1a; BloomFilter是一种多哈希函数映射的快速查找算法&#xff0c;它实际上是由一个超长的二进制位数组和一系列的哈希函数组成的。初始时二进制位数组全部为0&#xff0c;当给定一个待查询的元素时&#xff0c;这个元素会被一系列哈希函数计算映射出一系列的值…

【redis】布隆过滤器BloomFitter

【redis】布隆过滤器BloomFitter 文章目录 【redis】布隆过滤器BloomFitter前言一、面试题二、是什么1、设计思想&#xff1a; 本质就是判断具体数据是否存在于一个大的集合当中 三、布隆过滤器特点1、重点 有&#xff0c;是可能有&#xff0c;无是一定无2、小总结 四、原理1、…

Node【包】

文章目录 &#x1f31f;前言&#x1f31f;Nodejs包&#x1f31f;什么是包&#xff1f;&#x1f31f;自定义包&#x1f31f;包配置文件&#x1f31f;示例&#x1f31f;Package.json 属性说明&#x1f31f;语义化版本号&#x1f31f;package.json示例 &#x1f31f;符合CommonJS规…

怎么做好管综深化设计?高效就靠它

管线综合深化设计是指将设计阶段完成的机电管线进一步深化排布&#xff0c;结合建筑装修的要求&#xff0c;根据管线不同的性质与功能统筹管线位置排布。管线综合是 BIM 技术现阶段最基础也是应用最广泛的点&#xff0c;如何使机电各系统的使用功能效果达到最佳&#xff0c;整体…

(排序11)排序的时间复杂度,空间复杂度,稳定性总结

图片总结 内排序时间复杂度总结 内部排序&#xff1a;数据元素全部放在内存中的排序。. 在内排序当中比较快的有希尔排序&#xff0c;堆排序&#xff0c;快速排序&#xff0c;归并排序&#xff0c;这四个排序的时间复杂度都是O(n*logn)。其中希尔排序的时间复杂度更加准确的来…

RB-PEG-COOH,罗丹明聚乙二醇羧基;RhodamineB-PEG-acid;RB-PEG2000-COOH

RB-PG-COOH, 罗丹明聚乙二醇羧基 中文名称&#xff1a;罗丹明-聚乙二醇-羧基 英文名称&#xff1a;RhodamineB-PEG-acid RB-PEG-COOH 性状&#xff1a;固体或粘性液体&#xff0c;取决于分子量 溶剂&#xff1a;溶于水和DCM、DMF、DMSO等常规性有机溶剂 分子量&#xff1…

MySQL运维28-MySQL复制

文章目录 1、MySQL复制模式2、MySQL复制的兼容性3、与MySQL复制相关的两种日志3.1、中继日志3.2、MySQL复制的状态日志 4、MySQL主从复制的实施示例4.1、主从库安装4.2、主库配置4.3、从库的配置4.4、启动复制和确认成功 5、对MySQL复制的监控6、MySQL监控的运维6.1、在从库修改…