MQTT.js: 如何在连接尝试失败后关闭/连接到另一个代理? (用于使用桥接蚊子)

MQTT.js: How to close / connect to another broker after failed connection attempt? (for using bridged mosquitto)

我确实设置了两个支持 websocket 的 mosquitto 代理,并且能够通过 mqtt.js

连接到它们

现在我尝试使用一组可能的 mqtt 代理实现故障证明版本,应该按顺序尝试连接到这些代理,直到连接成功。如果连接失败,应该尝试下一个代理...到目前为止一切顺利,但如果我尝试连接到离线代理,不知何故 mqtt.js 会尝试无休止地重新连接。我无法关闭连接尝试并连接到下一个。

var client = mqtt.connect("ws://firstbrokerip:9001");

client.on('connect', function() {
 //consoleLog("[BROWSER] MQTT js-Client:"," Connected","green");
 client.subscribe("testchannel"); 
});

client.on('offline', function() {
 //consoleLog("[BROWSER] MQTT js-Client:", ' Offline',"red");
  client.end();
 client = mqtt.connect("ws://secondbrokerip:9001");
});

关于如何关闭连接并连接到下一个连接有什么想法吗? (请不要关心自定义 ConsoleLog 函数)

您不需要实施故障转移,它已内置到模块中:

来自 mqtt.js 文档 (https://github.com/mqttjs/MQTT.js#connect)

You can also specify a servers options with content: [{ host: 'localhost', port: 1883 }, ... ], in that case that array is iterated at every connect.

因此,您将 connect 方法选项对象传递给一个名为 servers 的键,它是要连接到的代理数组。

client = mqtt.connect({
  servers: [
    {
      host: 'firstbroker.ip',
      port: 9001,
      protocol: 'ws'
    },
    {
      host: 'secondbroker.ip',
      port: 9001,
      protocol: 'ws'
    }
  ]
});