首页 文章

客户端可能会重载mqtt代理

提问于
浏览
0

我正在使用MQTT node.js mosca broker . 我用这个命令运行它;

mosca -v --http-port 3000 --http-bundle --http-static ./ | bunyan

我有一个浏览器mqtt客户端 . 代码看起来像这样;

var mqtt_client = mqtt.connect('ws://127.0.0.1:3000');
            mqtt_client.subscribe('hello/world');
            mqtt_client.on('connect', function () {
                console.log("MQTT connected");
            });

        mqtt_client.on("message", function(topic, payload) {
            console.log([topic, payload].join(": "));
            //mqtt client connection not closed as line below is commented  
            //mqtt_client.end();
        });

假设我有许多类似的浏览器客户端,每个客户端订阅不同的mqtt主题 . 用户运行调用代码的网页,然后关闭选项卡 . 没有明确关闭连接或关闭主题的代码 . MQTT代理会死于RAM过载吗?

1 回答

  • 1

    当选项卡关闭时,websocket连接也将关闭,因此代理应该清理会话,如果在keepalive期间没有收到任何消息或ping,那么连接也将被清除 .

    主题无法关闭,没有所有权或开放/封闭的概念,它们只是消息路由的标识符 .

    如果您使用大于0的QOS和持久会话,则可能在等待特定客户端重新连接时累积消息,但是编写良好的代理应将这些存储在磁盘而不是内存中 .

相关问题