网站项目怎么做,知言 wordpress,电商app开发费用,mk厂手表网站文章 前言错误场景问题分析解决方案后言 前言 ✨✨ 他们是天生勇敢的开发者#xff0c;我们创造bug#xff0c;传播bug#xff0c;毫不留情地消灭bug#xff0c;在这个过程中我们创造了很多bug以供娱乐。 前端bug这里是博主总结的一些前端的bug以及解决方案#xff0c;感兴… 文章 前言错误场景问题分析解决方案后言 前言 ✨✨ 他们是天生勇敢的开发者我们创造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 不能重复 换成不一样的 可以搞一个随机数 后言 创作不易要是本文章对广大读者有那么一点点帮助 不妨三连支持一下您的鼓励就是博主创作的动力