我的 mqtt.go
文件是这样写的:
// Publisher sends a message to an MQTT broker
type Publisher interface {
Publish(topic string, qos byte, retained bool, payload interface{}) mqtt.Token
}
// PublisherImpl implements sending messages into a broker
type PublisherImpl struct {
mqtt.Client
}
// Subscriber consumer of MQTT topic(s)
type Subscriber interface {
Subscribe(topic string, handler handler.Handler)
Disconnect(wait uint)
}
// SubscriberImpl implements sending messages into a broker
type SubscriberImpl struct {
client mqtt.Client
}
// Disconnect closes connection to broker
func (s *SubscriberImpl) Disconnect(wait uint) {
s.client.Disconnect(wait)
}
// Subscribe creates a new subscription to a handler
func (s *SubscriberImpl) Subscribe(topic string, handler handler.Handler) {
go func() {
token := s.client.Subscribe(topic, 0, handler.Handle)
if token.Error() != nil {
log.Println(token.Error())
}
}()
}
// NewPublisher Create new MQTT publisher instance
func NewPublisher(clientID string, uri string) Publisher {
parsedURI := parseURI(uri)
client := connect(clientID, parsedURI)
return &PublisherImpl{
client,
}
}
// NewSubscriber Create new MQTT subscriber instance
func NewSubscriber(clientID string, uri string) Subscriber {
parsedURI := parseURI(uri)
client := connect(clientID, parsedURI)
return &SubscriberImpl{
client,
}
}
func connect(clientID string, uri *url.URL) mqtt.Client {
opts := createClientOptions(clientID, uri)
client := mqtt.NewClient(opts)
token := client.Connect()
for !token.WaitTimeout(3 * time.Second) {
}
if err := token.Error(); err != nil {
log.Fatal(err)
panic(err)
}
return client
}
func createClientOptions(clientID string, uri *url.URL) *mqtt.ClientOptions {
opts := mqtt.NewClientOptions()
opts.AddBroker(fmt.Sprintf("tcp://%s", uri.Host))
opts.SetUsername(uri.User.Username())
password, _ := uri.User.Password()
opts.SetPassword(password)
opts.SetClientID(clientID)
return opts
}
func parseURI(uriString string) *url.URL {
url, err := url.Parse(uriString)
if err != nil {
panic(err)
}
return url
}
但是当我更新服务器上的代码并在此之后服务器重新启动时,这不起作用,即使接收发布数据但 Mqtt
事情也不起作用。也许我在这里遗漏了一些东西,比如重新启动时我需要检查客户端是否没有正确关闭?或者我缺少的东西不能让它运行?
我是新手,如果有任何错误,请忽略。