(原) Mqtt服务器 Broker

原创文章,请后转载,并注明出处。

使用HMQ建立了一个MQTT服务器,然后建立一个客户端,看看推送和获取。

package main

import (
	"fmt"
	"log"
	"os"
	"os/signal"
	"time"

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

var (
	server = "scwy.net"
	port   = "1884"
	uid    = "Ease"
	topic  = "Ease001"
)

func main() {
	// 创建 MQTT 客户端配置
	opts := MQTT.NewClientOptions()
	opts.AddBroker(fmt.Sprintf("tcp://%s:%s", server, port))
	opts.SetClientID(uid)
	// 创建 MQTT 客户端实例
	client := MQTT.NewClient(opts)
	// 连接到 MQTT 服务器
	if token := client.Connect(); token.Wait() && token.Error() != nil {
		log.Fatal(token.Error())
	}
	// 在连接成功后进行订阅和发布操作
	go func() {
		// 订阅主题
		if token := client.Subscribe(topic, 0, func(c MQTT.Client, m MQTT.Message) {
			fmt.Printf("主题 %s 反馈信息:  %s \n", m.Topic(), m.Payload())
		}); token.Wait() && token.Error() != nil {
			log.Fatal(token.Error())
		}
		// 发布消息
		for i := 0; i < 3; i++ {
			text := fmt.Sprintf("信息%d", i)
			token := client.Publish(topic, 0, false, text)
			token.Wait()
			fmt.Println("发布:", text)
			time.Sleep(time.Second)
		}
	}()
	// 等待退出信号
	c := make(chan os.Signal, 1)
	signal.Notify(c, os.Interrupt)
	<-c
	// 断开与 MQTT 服务器的连接
	client.Disconnect(250)
}