Maison  >  Article  >  développement back-end  >  mqtt en avant golang

mqtt en avant golang

PHPz
PHPzoriginal
2023-05-22 13:54:08707parcourir

MQTT Forwarding Golang

Avec l'avènement de l'ère de l'Internet des objets (IoT), la communication entre les appareils est devenue de plus en plus importante. MQTT (Message Queuing Telemetry Transport) est un protocole de messagerie léger conçu pour fournir un mécanisme d'échange de données efficace pour un nombre illimité d'appareils et d'applications sur des connexions réseau à faible bande passante, à latence élevée ou peu fiables. Dans cet article, nous explorerons comment utiliser Golang pour créer un serveur proxy de transfert MQTT afin que différents appareils puissent communiquer via le protocole MQTT.

Nous devons d’abord installer Golang. Une fois l'installation terminée, nous devons installer le package paho-mqtt, qui est la bibliothèque principale utilisée pour communiquer avec MQTT dans Golang. Nous pouvons l'installer avec la commande suivante :

go get github.com/eclipse/paho.mqtt.golang

Une fois terminé, nous créerons un dossier de projet appelé mqtt-forward, qui comprend un fichier Golang appelé main.go. Nous devons importer le package paho-mqtt dans notre code :

import (
    "fmt"

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

Ensuite, nous devons définir les options du client MQTT :

opts := mqtt.NewClientOptions().AddBroker("tcp://broker.hivemq.com:1883").SetClientID("mqtt-forward")

Dans cet exemple, nous nous connectons au courtier MQTT public HiveMQ, sélectionnons le protocole de transport TCP, le port The le numéro est 1883 et l'ID client est défini sur "mqtt-forward". Nous pouvons également définir le nom d'utilisateur et le mot de passe pour la connexion MQTT.

Maintenant, nous allons établir une connexion client MQTT et la référencer via la variable pointeur client de type mqtt.Client :

client := mqtt.NewClient(opts)
if token := client.Connect(); token.Wait() && token.Error() != nil {
    panic(token.Error())
}
defer client.Disconnect(250)

Dans cet exemple, nous créons une nouvelle version du client MQTT en utilisant la méthode mqtt.NewClient(opts) options de terminal et de pass. Après vous être connecté au serveur proxy MQTT, nous fermerons le client MQTT et attendrons jusqu'à 250 millisecondes pour nous assurer que la connexion a été fermée avec succès. Le mot-clé defer est utilisé pour exécuter le code de nettoyage avant le retour de la fonction, cela garantit que nous fermons correctement le client MQTT lorsqu'il n'est pas nécessaire.

Nous devons également créer une fonction de traitement après avoir établi une connexion avec le serveur MQTT afin de recevoir les messages MQTT de l'appareil. Les messages reçus sont classés par sujets MQTT.

func onMessageReceived(client mqtt.Client, message mqtt.Message) {
    fmt.Printf("Received message: %s from topic: %s
", message.Payload(), message.Topic())
}

Dans cet exemple, nous imprimons la charge utile (la charge utile est la partie qui transmet réellement les données) et le sujet du message MQTT reçu.

Maintenant, nous devons nous abonner au sujet MQTT. On peut ajouter une fonction de rappel au client en utilisant le code suivant :

if token := client.Subscribe("testtopic/#", byte(0), onMessageReceived); token.Wait() && token.Error() != nil {
    panic(token.Error())
}

Dans cet exemple, on s'abonne à tous les sujets commençant par "testtopic". Nous définissons la QoS sur l'octet 0, ce qui signifie que les messages que nous recevons ne sont envoyés qu'une seule fois.

Notre fonction principale complète est la suivante :

func main() {
    opts := mqtt.NewClientOptions().AddBroker("tcp://broker.hivemq.com:1883").SetClientID("mqtt-forward")
    client := mqtt.NewClient(opts)

    if token := client.Connect(); token.Wait() && token.Error() != nil {
        panic(token.Error())
    }
    defer client.Disconnect(250)

    if token := client.Subscribe("testtopic/#", byte(0), onMessageReceived); token.Wait() && token.Error() != nil {
        panic(token.Error())
    }

    for {
        time.Sleep(time.Second)
    }
}

func onMessageReceived(client mqtt.Client, message mqtt.Message) {
    fmt.Printf("Received message: %s from topic: %s
", message.Payload(), message.Topic())
}

Après le démarrage du programme, nous nous connecterons au courtier MQTT sur le port 1883 via TCP, ajouterons une fonction de rappel et nous abonnerons à tous les sujets commençant par "testtopic". Enfin, on entre dans une boucle infinie pour pouvoir rester connecté et continuer à recevoir des messages MQTT.

Nous pouvons exécuter le programme Golang à l'aide de la commande suivante :

go run main.go

En résumé, nous avons présenté comment utiliser Golang et le package paho-mqtt pour créer un serveur proxy de transfert MQTT. En comprenant comment se connecter à un serveur de courtier MQTT et s'abonner à certains sujets pour capturer les messages de différents appareils, nous avons désormais pu obtenir des messages MQTT de manière centrée sur l'appareil, ce qui est très utile pour créer des applications IOT.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Article précédent:rubis à golangArticle suivant:rubis à golang