登录
首页 >  Golang >  Go问答

Golang Paho MQTT 组件的基于 Websocket 实现方式

来源:stackoverflow

时间:2024-02-07 09:54:15 267浏览 收藏

编程并不是一个机械性的工作,而是需要有思考,有创新的工作,语法是固定的,但解决问题的思路则是依靠人的思维,这就需要我们坚持学习和更新自己的知识。今天golang学习网就整理分享《Golang Paho MQTT 组件的基于 Websocket 实现方式》,文章讲解的知识点主要包括,如果你对Golang方面的知识点感兴趣,就不要错过golang学习网,在这可以对大家的知识积累有所帮助,助力开发能力的提升。

问题内容

嘿,我试图通过 golang paho mqtt 客户端连接到 aws iot core。我尝试了正常的 mqtt 连接,没有任何问题。接下来,我想尝试通过 websocket 上的 mqtt 连接,但在 paho.mqtt 文档中找不到任何相关内容。如何建立 websocket 连接?如有必要,我可以通过正常的 mqtt 连接发布我的代码。 编辑,这是我的代码:

package main

import (
    "crypto/tls"
    "fmt"
    "time"

    MQTT "github.com/eclipse/paho.mqtt.golang"
)

type Message struct {
    message string
}

/*var f MQTT.MessageHandler = func(client MQTT.Client, msg MQTT.Message) {
    fmt.Printf("TOPIC: %s\n", msg.Topic())
    fmt.Printf("MSG: %s\n", msg.Payload())
}*/

func main() {
    cer, err := tls.LoadX509KeyPair("cd5a04e9fd9a094326c9ee0cdc1e1f7b2e3510a9e106968683d333a2a4344ca7-certificate.pem.crt",
        "./cd5a04e9fd9a094326c9ee0cdc1e1f7b2e3510a9e106968683d333a2a4344ca7-private.pem.key")
    check(err)

    cid := "ClientID"

    // AutoReconnect option is true by default
    // CleanSession option is true by default
    // KeepAlive option is 30 seconds by default
    connOpts := MQTT.NewClientOptions() // This line is different, we use the constructor function instead of creating the instance ourselves.
    connOpts.SetClientID(cid)
    connOpts.SetMaxReconnectInterval(1 * time.Second)
    connOpts.SetTLSConfig(&tls.Config{Certificates: []tls.Certificate{cer}})

    host := "a2to6mbspmaw82-ats.iot.eu-west-1.amazonaws.com"
    port := 443

    brokerURL := fmt.Sprintf("wss://%s:%d", host, port)
    connOpts.AddBroker(brokerURL)

    mqttClient := MQTT.NewClient(connOpts)
    if token := mqttClient.Connect(); token.Wait() && token.Error() != nil {
        panic(token.Error())
    }

    var message = "message from lap"

    for message != "bye" {
        token := mqttClient.Publish("some_topic", 0, false, message)
        token.Wait()
        message = "bye"
    }
}

func check(err error) {
    if err != nil {
        panic(err)
    }
}

正确答案


来自 Eclipse Paho GoLang page

列表中的第二个条目建议您只需输入具有正确架构的 URL(ws:// 或可能 wss://

今天关于《Golang Paho MQTT 组件的基于 Websocket 实现方式》的内容就介绍到这里了,是不是学起来一目了然!想要了解更多关于的内容请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>