doushi7314 2018-10-30 00:37
浏览 270

paho.mqtt.golang无法通过websockets连接

I am not able to connect to any MQTT broker via websockets.

I first set up a local broker with websockets enabled. The connection did not establish. I then tried to connect to some public brokers which also does not work. Could you give me a hint on solving this? It may only be a firewall problem..

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("
valid 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())
        }
    }
}
  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥100 set_link_state
    • ¥15 虚幻5 UE美术毛发渲染
    • ¥15 CVRP 图论 物流运输优化
    • ¥15 Tableau online 嵌入ppt失败
    • ¥100 支付宝网页转账系统不识别账号
    • ¥15 基于单片机的靶位控制系统
    • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
    • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
    • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
    • ¥15 手机接入宽带网线,如何释放宽带全部速度