javascript - unscbribe 后的 mqtt.js 仍然收到来自旧侦听器的消息
问题描述
我正在使用 mqtt.js 从 mqtt 服务器接收 websocket,订阅工作正常,但我需要通过更改 websocket 的配置来动态更改主题的订阅,问题是更改配置后我开始接收来自新主题和旧主题的消息,即使在我执行 client.unsubscribe() 之后,旧侦听器仍然处于活动状态。
有没有办法删除旧的列表器或停止旧的 websocket 并只保留新的 websocket,下面是代码片段:
import React, { Component } from 'react'
import mqtt from 'mqtt';
var options = {
protocol: 'ws',
rejectUnauthorized: false,
clientId: 'clientid' ,
username: 'username',
password: 'password',
clean: true
};
if (subscribed && (subscription != subscription1) && (subscription !=''))
{
console.log("subscription != subscription1 and changing configurations");
console.log("previous subscription is : " , subscription)
console.log("New subscription is : ", subscription1)
client.unsubscribe(subscription, () =>
{
client.end(true, () => {
console.log("client ended")
// console.log("connection status is : ", connectionStatus, "subscription is : ", subscription1);
console.log("subscribing to :", subscription1.toString());
client = mqtt.connect('ws://server:port/mqtt', options);
Configchanged = true;
client.subscribe(subscription1.toString(), (err, granted) => {
if (granted) {
var note = '';
if (client) {
client.on('message', function dispatchMqttTempMsg(topic, message) {
note = message.toString();
setValue(parseFloat(note));
console.log("received value to listener is", note)
})
}
}
else {
console.log("error during subscription", err)
}
});
})
})
// client.close(true)
// console.log("unsubscribing for guage no. ", props.id, "topic : ", subscription )
}
subscription = subscription1;
}
}
即使成功取消订阅,上面的 client.on('message',..) 也会保持活动状态..
解决方案
取消订阅似乎无法正常工作,在订阅新主题之前,我必须执行另一个程序来取消订阅所有以前的主题,这样 websocket 侦听器将被删除,我不会收到来自旧主题的消息。
推荐阅读
- apache-kafka - Kafka 滚动升级,更改 inter.broker.listener.name
- c - 'netif' 的 ESP32 存储大小未知,如何解决此错误?
- python - 根据其他两个列表在 Python 中创建列表?
- forms - 如何在颤动切换标签之前强制执行功能(验证)?
- javascript - 在类函数之间传输控制流 webdriverio
- tcp - netcat 监听器会在一段时间后停止?
- react-native - 如何在 SectionList 内的子引用上使用 measure 方法?
- python - 如何填充线条之间的区域
- spring-boot - Spring Boot War 文件未在 websphere 8.5 中运行
- java - ReactiveMongo 模板。计数忽略限制功能