簡體   English   中英

如何關閉與 mqtt 客戶端 node.js 的連接

[英]How to close connection with mqtt client node.js

我正在做一個方法如下:當我按下一個按鈕時,我想不斷地從我訂閱的主題中獲取消息,當我按下另一個按鈕時,我想關閉連接並且不再接收任何消息. 我認為連接正確關閉是因為執行了 client.on('close') 事件,但是我繼續接收來自該主題的消息。 我該怎么做才能不再收到任何消息?

startStop是一個布爾值,當我想接收消息時為真,當我想停止接收消息時為假。 我究竟做錯了什么?

這是我的代碼:

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);
      });
    }
 }



問題是每次調用函數時都在創建連接對象,而不是保持對它的持久引用。

這意味着當你調用startstop等於 true 的函數時,你將創建一個新的客戶端對象,訂閱主題,然后附加消息回調。 然后您丟棄對客戶端對象的引用,因此無法取回它。

當您在startstop設置為 false 的情況下調用該函數時,您仍然會創建一個新的客戶端對象,但會立即關閉它。 (在客戶端關閉后調用取消訂閱除了可能拋出錯誤之外什么也不會實現)。

鑒於您有另一個變量( reguladorId ),您可能需要使用一個對象,該對象將其用作保存單獨客戶端實例的鍵。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM