2015-12-05 81 views
0

我正在使用MQTT node.js mosca broker。我用這個命令運行它;客戶端可能超載mqtt經紀人

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

當該選項卡關閉時,websocket連接也會關閉,因此代理應該清理會話,並且如果在keepalive時間段內沒有收到任何消息或ping消息,則連接也將被清除。

主題不能關閉,沒有所有權或打開/關閉的概念,它們只是消息路由的標識符。

如果您使用的QOS大於0和持久性會話,則有可能在等待特定客戶端重新連接時累積消息,但寫得很好的代理應將這些消息存儲在磁盤上,而不是存儲在內存中。

+0

謝謝。 Upvoted並選擇作爲答案。我正在使用在node.js中編寫的mosca MQTT代理。你會認爲這是一個寫得好的經紀人嗎? – user781486