mqtt客户端订阅一直重复连接?

文章

  • 前言
  • 错误场景
  • 问题分析
  • 解决方案
  • 后言

前言

✨✨ 他们是天生勇敢的开发者,我们创造bug,传播bug,毫不留情地消灭bug,在这个过程中我们创造了很多bug以供娱乐。
前端bug这里是博主总结的一些前端的bug以及解决方案,感兴趣可以看一下,有不同方案可以在评论区提出

在这里插入图片描述


正文开始

错误场景

一个mq客户端负责发布数据 代码如下:

// 连接到 MQTT 服务器
const url = "mqtt://127.0.0.1:1883";const options = {// 可以在这里添加额外的连接选项,比如 clientId 等clientId: "MQTT1",connectTimeout: 4000,reconnectPeriod: 1000,clean: true,username: "c37",password: "vi123456",
};
let mqttClient = mqtt.connect(url, options);
// 监听 MQTT 消息
mqttClient.on("connect", () => {console.log("MQTT Connected");
});
mqttClient.on("error", (err) => {console.error("MQTT client error:", err);
});// 确保在 Electron 应用关闭时清理 MQTT 客户端
app.on("window-all-closed", () => {if (process.platform !== "darwin") {app.quit();}if (mqttClient) {mqttClient.end();}
});app.on("quit", () => {if (mqttClient) {mqttClient.end();}
});const Index = 32;
const Value = 100;
const message = `Variable${Index}:${Value}`;mqttClient.publish("/MQTT1/pub", message, { qos: 1 }, (err) => {if (err) {console.error("Failed to publish message:", err);} else {console.log("Message sent successfully:", message);}
});

另外一个mq客户端负责订阅数据 代码如下:

async function connectAndSubscribe(mqttModule, variables) {try {const options = {clientId: "MQTT1",connectTimeout: 4000,reconnectPeriod: 1000,clean: true,username: "c37",password: "vi123456",};const mqttClient = mqttModule.connect('mqtt://127.0.0.1:1883', options);let isConnected = false; // 添加标志变量mqttClient.on('connect', function () {if (!isConnected) {isConnected = true;console.log('连接到 MQTT Broker 成功');mqttClient.subscribe('/MQTT1/pub', function (err) {if (!err) {console.log('已订阅 MQTT 主题 /MQTT1/pub');} else {console.error('订阅失败:', err);}});}});mqttClient.on('message', function (topic, message) {console.log(`接收到来自主题 ${topic} 的消息: ${message.toString()}`);const receivedMessage = message.toString();const parts = receivedMessage.split(':');if (parts.length === 2) {const variableName = parts[0];const value = parseFloat(parts[1]);if (variables[variableName] !== undefined) {variables[variableName].value = value;console.log(`已更新 ${variableName}${value}`);} else {console.log(`未知变量名称: ${variableName}`);}} else {console.log(`消息格式无效: ${receivedMessage}`);}});mqttClient.on('error', function (err) {console.error('MQTT 客户端错误:', err);});mqttClient.on('reconnect', function () {console.log('尝试重新连接到 MQTT Broker...');});mqttClient.on('offline', function () {console.log('MQTT 客户端离线');});} catch (err) {console.error("连接或订阅过程中发生错误:", err);}
}

问题分析

不报错 但是信息一直发送不过去 并且一直重连
原因:options中的clientId 重复了,mq允许一个用户在两个客户端登陆 代表我们用户名和密码可以一致,但是clientId不行
Client ID:每个 MQTT 客户端在连接到 Broker 时都需要提供一个唯一的 Client ID。如果多个客户端使用相同的 Client ID,则后一个连接将会替换掉前一个连接。这是 MQTT 协议的标准行为。

解决方案

options中的Client ID 不能重复 换成不一样的 可以搞一个随机数

后言

创作不易,要是本文章对广大读者有那么一点点帮助 不妨三连支持一下,您的鼓励就是博主创作的动力

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

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

相关文章

解决使用MobaXterm不能向Ubuntu上传下载文件的问题

如上图所示 解决方案 新建连接,使用root账户建立ssh会话,就是建立会话的时候,用户名使用root。ubuntu系统默认不允许远程root账户建立连接,表现就是你新建ssh会话,在第一步输入root密码的时候,密码正确会报…

一文探索RareShop:首个面向消费者的RWA NFT商品发售平台

作者:Weilin,PANews 本轮牛市中,加密消费级应用正成为一种热门趋势,比如pump.fun和Polymarket等产品已成为C端用户的明星。加密货币正日益渗透到日常消费者的产品、服务和行为中。这意味着加密货币的使用不再局限于投机交易或去中…

appium启动hbuild打包的apk异常解决

目录 一、错误信息 二、问题解决 2.1 通过以下命令获取安装包名称: 2.2 这个launcher状态下的安装包名称和active,替换原先的安装包名称 一、错误信息 通过adb shell dumpsys activity | findstr "mResume" 命令获取的安装包信息&#xff…

从零开始学习OMNeT++系列第三弹——新建一个使用INET框架的工程

上一篇学习了如何新建一个omnet的工程,这篇来学习下INET框架以及如何使用INET框架来新建一个工程。 INET框架是什么 INET框架是一个开源模型库,用于OMNeT仿真环境。它为研究者和学生在使用通信网络时提供协议、代理和其他模型。当设计和验证新协议或探…

深入理解计算机系统--计算机系统漫游

对于一段最基础代码的文件hello.c&#xff0c;解释程序的运行 #include <stdio.h>int main() {printf ( "Hello, world\n") ;return 0; }1.1、信息就是位上下文 源程序是由值 0 和 1 组成的位&#xff08;比特&#xff09;序列&#xff0c;8 个位被组织成一组…

wx.chooseMedia深入研究!

如何处理wx.chooseMedia选择的媒体文件&#xff1f; 当使用wx.chooseMedia选择媒体文件后&#xff0c;可以根据以下步骤进行处理&#xff1a; 一、获取媒体文件信息 在成功回调函数中&#xff0c;可以通过res.tempFiles获取选择的媒体文件数组。每个元素包含了媒体文件的相关…

安防监控摄像头图传模组,1公里WiFi无线传输方案,监控新科技

在数字化浪潮汹涌的今天&#xff0c;安防监控领域也迎来了技术革新的春风。今天&#xff0c;我们就来聊聊这一领域的产品——摄像头图传模组&#xff0c;以及它如何借助飞睿智能1公里WiFi无线传输技术&#xff0c;为安防监控带来未有的便利与高效。 一、安防监控的新篇章 随着…

mysql--基本查询

目录 搞定mysql--CURD操作&#xff0c;细节比较多&#xff0c;不难&#xff0c;贵在多多练 1、Create--创建 &#xff08;1&#xff09;单行插入 / 全列插入 &#xff08;2&#xff09;插入否则替换 &#xff08;3&#xff09;替换 2、Retuieve--select 1&#xff09;全…

其他-自己手动更换汽车电磁进排气阀0.9.2

其他-自己手动更换汽车电磁进排气阀0.9.0 背景本次工具流程注意参考 2024年10月18日08:57:00—0.9.2 背景 昨天手动更换了电磁阀&#xff0c;记录下过程和注意事项&#xff0c;简单总结了一下 本次工具 10号套筒和工具老虎钳锤子一字改刀新的进排气电磁阀 流程 打开引擎盖…

波克 上海 Unity开发笔试题 2024

波克 Unity开发笔试题 2024 主要分为四部分 如果没有准备好,不要点击笔试链接,进入就会自动开始 Unity 1.Unity生命周期执行顺序 Awake → OnEnable → Start → FixedUpdate → Update → LateUpdate 2.阅读代码,可能会出现哪些问题? string cnt = ""; lis…

FreeRTOS - 软件定时器

在学习FreeRTOS过程中&#xff0c;结合韦东山-FreeRTOS手册和视频、野火-FreeRTOS内核实现与应用开发、及网上查找的其他资源&#xff0c;整理了该篇文章。如有内容理解不正确之处&#xff0c;欢迎大家指出&#xff0c;共同进步。 1. 软件定时器 软件定时器也可以完成两类事情…

JDK-23与JavaFX的安装

一、JDK-23的安装 1.下载 JDK-23 官网直接下载&#xff0c;页面下如图&#xff1a; 2.安装 JDK-23 2.1、解压下载的文件 找到下载的 ZIP 文件&#xff0c;右键点击并选择“解压到指定文件夹”&#xff0c;将其解压缩到您希望的目录&#xff0c;例如 C:\Program Files\Java\…

多进程思维导图

1> 思维导图 2> 使用父子进程完成两个文件的拷贝&#xff0c;父进程拷贝前一半&#xff0c;子进程拷贝后一半&#xff0c;两个进程同时进行&#xff08;君子作业&#xff09; #include <myhead.h> typedef struct sockaddr_in addr_in_t; typedef struct sockaddr…

LeetCode //C - 412. Fizz Buzz

412. Fizz Buzz Given an integer n, return a string array answer (1-indexed) where: answer[i] “FizzBuzz” if i is divisible by 3 and 5.answer[i] “Fizz” if i is divisible by 3.answer[i] “Buzz” if i is divisible by 5.answer[i] i (as a string) if no…

毕业设计选题:基于django+vue的个人博客系统设计与开发

开发语言&#xff1a;Python框架&#xff1a;djangoPython版本&#xff1a;python3.7.7数据库&#xff1a;mysql 5.7数据库工具&#xff1a;Navicat11开发软件&#xff1a;PyCharm 系统展示 管理员登录 管理员功能界面 博主管理 博客文章管理 博文排行管理 博文打赏管理 博文…

Spring 的依赖注入的最常见方式

在 Spring 中&#xff0c;依赖注入的方式有多种选择。下面我们来逐一分析它们的特点、适用场景和注意事项&#xff1a; 1. 构造函数注入 构造函数注入要求在对象创建时提供所有依赖。这种方式确保依赖在对象创建后不可变&#xff0c;特别适合必须强制存在的依赖。所有依赖在对…

MyBatis 动态 SQL 详解

1. 什么是动态 SQL&#xff1f; 在使用 MyBatis 进行数据库查询时&#xff0c;可能会遇到一些需要根据条件动态生成 SQL 语句的情况。MyBatis 提供了强大的动态 SQL 支持&#xff0c;通过标签和条件语句&#xff0c;可以让 SQL 语句根据不同的输入参数动态生成。这大大提高了代…

JavaWeb 22.Node.js_简介和安装

有时候&#xff0c;后退原来是向前 —— 24.10.7 一、什么是Node.js Node.js 是一个于 Chrome V8 的 JavaScript 运行时环境&#xff0c;可以使 JavaScript 运行在服务器端。使用 Node.js&#xff0c;可以方便地开发服务器端应用程序&#xff0c;如 Web 应用、API、后端服务&a…

Python 工具库每日推荐 【FastAPI】

文章目录 引言Web 框架的重要性今日推荐:FastAPI Web 框架主要功能:使用场景:安装与配置快速上手示例代码代码解释实际应用案例案例:构建一个简单的博客 API案例分析高级特性依赖注入系统后台任务扩展阅读与资源优缺点分析优点:缺点:总结【 已更新完 TypeScript 设计模式…

计算机网络作业(hadoop排错)

好久没发了&#xff0c;也不知道在干吗 第一个错误是 localhost拒绝连接 原因是没有给本机设置ssh免登录 ssh-copy-id localhost&#xff08;命令大概长这样&#xff09; 第二个错误是 那个什么core.xml文件头部地方&#xff0c;不能有空格 其他的错误是代码错误&#xf…