如何关闭与mqtt客户端node.js的连接

问题描述 投票:0回答:1

我正在执行一种方法,其工作方式如下:当我按下一个按钮时,我想要不断地从订阅的主题中获取消息,当我按下另一个按钮时,我想要关闭连接并且不再接收任何消息。我认为连接已正确关闭,因为执行了client.on('close')事件,但是我继续从该主题接收消息。我该怎么办才能不再收到任何消息?

startStop是布尔值,当我想接收消息时为true,而当我想停止接收消息时为false。我在做什么错?

这是我的代码:

mqttClientSubscribeToTraceability(reguladorId, startStop) {
    const tls = (Meteor.settings.mqttConfigClient.mqtt.port === 8883) || Meteor.settings.mqttConfigClient.mqtt.ca;

    const client = mqtt.connect(`${tls ? 'mqtts' : 'mqtt'}://${Meteor.settings.mqttConfigClient.mqtt.host}:${Meteor.settings.mqttConfigClient.mqtt.port}`, 
 { keyPath: Meteor.settings.mqttConfigClient.mqtt.key, 
certPath: Meteor.settings.mqttConfigClient.mqtt.cert, 
ca: [Meteor.settings.mqttConfigClient.mqtt.ca], 
rejectUnauthorized: false 
});

    const topic = `in/1.0/trafficLights/${global.region}/${reguladorId}`;

    const json = {};

    if (startStop) {
      client.on('connect', () => {
        client.subscribe(topic);
      });
      client.on('message', (topic, message) => {
        const msg = JSON.parse(message);
        console.log('msg', msg);
      });   
    } else {
      client.end();
      client.on('close', () => {
        client.unsubscribe(topic);
      });
    }
 }



node.js meteor mqtt publish-subscribe unsubscribe
1个回答
0
投票

问题是,您每次调用该函数时都在创建连接对象,而没有对其进行持久引用。

© www.soinside.com 2019 - 2024. All rights reserved.