Я не могу подключиться к любому брокеру MQTT через веб-сокеты.
Сначала я настроил локального брокера с включенными веб-сокетами. Соединение не установлено. Затем я попытался подключиться к некоторым публичным брокерам, которые также не работают.
Не могли бы вы дать мне подсказку по решению этой проблемы?
Это может быть только проблема с брандмауэром ..
package main
import (
"fmt"
"sync"
"time"
mqtt "github.com/eclipse/paho.mqtt.golang"
)
func main() {
var ipRange []string
ipRange = append(ipRange,
"tcp://mqtt.flespi.io:1883",
"tcp://test.mosquitto.org:1883",
"tcp://iot.eclipse.org:1883",
"tcp://mqtt.fluux.io:1883",
"tcp://broker.hivemq.com:1883",
"ws://mqtt.flespi.io:80",
"ws://iot.eclipse.org:80",
"ws://broker.hivemq.com:8000",
"ws://test.mosquitto.org:80",
"ws://broker.bevywise.com:8443",
"ws://mqtt.dioty.co:8080",
)
opts := mqtt.NewClientOptions()
opts.ConnectTimeout = 1 * time.Second
opts.PingTimeout = 1 * time.Second
opts.WriteTimeout = 1 * time.Second
var clients []mqtt.Client
for i := 0; i < len(ipRange); i++ {
opt := *opts
opt.AddBroker(ipRange[i])
clients = append(clients, mqtt.NewClient(&opt))
}
startTime := time.Now()
var validBrokers []string
var wg sync.WaitGroup
wg.Add(len(clients))
fmt.Println("--- discovery started (", len(clients), "clients) ---")
for i := 0; i < len(clients); i++ {
go connectMQTT(clients[i], &wg, &validBrokers)
}
wg.Wait()
fmt.Println("--- discovery finished ---")
fmt.Println("\nvalid brokers after", time.Now().Sub(startTime), ":")
for i := 0; i < len(validBrokers); i++ {
fmt.Println(validBrokers[i])
}
}
func connectMQTT(client mqtt.Client, waitgroup *sync.WaitGroup, brokers *[]string) {
defer waitgroup.Done()
bla := client.OptionsReader()
if token := client.Connect(); token.Wait() {
fmt.Println(bla.Servers()[0].Hostname()+":"+bla.Servers()[0].Port(), client.IsConnected())
if token.Error() == nil {
*brokers = append(*brokers, bla.Servers()[0].Hostname()+":"+bla.Servers()[0].Port())
}
}
}