gpt4 book ai didi

mysql - 如何在 Node js 中重新启动 mqtt 订阅者

转载 作者:行者123 更新时间:2023-11-29 09:28:38 24 4
gpt4 key购买 nike

项目使用 Node Js 和 MQTT

设备最初订阅了一个主题或主题列表,并开始接收为这些主题发布的消息,管理员从仪表板分配了另一个新主题,客户端代码正在设备上运行(订阅者)管理员已无法重新启动它,设备如何动态更新到新分配的主题?我们是否需要重新启动设备才能获取更新的分配主题列表?

//subscriber.js

var mqtt = require('mqtt')
var client = mqtt.connect('mqtt://test.mosquitto.org')
const mysql = require('mysql');

const subName = 'iPhoneX';

var subscribed = [];
const connection = mysql.createConnection({
host: 'localhost',
user: 'root',
password: '',
database: 'mydb'
});
connection.connect((err) => {
if (err) throw err;
console.log('Connected!');
});
var qry = `SELECT topic_name from sub_table s where s.sub_name='${subName}'`;

connection.query(qry, (err,rows) => {
if(err) throw err;
rows.forEach( (row) => {
console.log(row.topic_name);
subscribed.push(row.topic_name);
});
});

client.on('connect', function () {
subscribed.forEach(element => {
client.subscribe(element);
});
})

client.on('message', function (topic, message) {
console.log(topic, '------>', message.toString());
})

出版商

发布者只是添加主题名称,以及在表中分配该条目的设备并使用主题名称发布消息

我想做什么

当新条目分配给订阅者时,我想让我的订阅者重新连接/重新启动以获取所有更新的设备?

在当前场景中,当我重新启动订阅者代码时添加新主题后,它工作正常,但我不想每次都重新启动它。

最佳答案

将新主题推送到订阅数组后,您可以关闭并重新连接 mqtt 连接/订阅者。

connection.query(qry, (err,rows) => {
if(err) throw err
rows.forEach( (row) => {
console.log(row.topic_name)
subscribed.push(row.topic_name)
})
if (rows.length > 0) {
client.end()
client = mqtt.connect('mqtt://test.mosquitto.org')
}
})

您的 client.on('connect', function () 将完成剩下的工作,并在再次建立 mqtt 连接后重新订阅数组中的每个主题。

关于mysql - 如何在 Node js 中重新启动 mqtt 订阅者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59173130/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com