Golang中生成通道密钥的Emitter问题求助

Golang中生成通道密钥的Emitter问题求助 我需要使用 emitter 从后端生成频道密钥。 库:https://github.com/emitter-io/go

// 创建客户端并连接到代理
    c, _ := emitter.Connect(host, func(_ *emitter.Client, msg emitter.Message) {
        fmt.Printf("[emitter] -> [B] received: '%s' topic: '%s'\n", msg.Payload(), msg.Topic())
    })

    key2, err := c.GenerateKey(masterKey,newChannel, "rwls", ttl)
    if err != nil {
        panic(err)
    }

    fmt.Println(key2)

我没有收到任何错误,但也没有收到任何消息。知道这里出了什么问题吗?


更多关于Golang中生成通道密钥的Emitter问题求助的实战教程也可以访问 https://www.itying.com/category-94-b0.html

3 回复

emitter.Connect 返回一个 error 作为其第二个参数,但你的示例忽略了该值。请检查它是否非空。

func main() {
    fmt.Println("hello world")
}

更多关于Golang中生成通道密钥的Emitter问题求助的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


emitter-io 库中存在一个问题,现在已修复。 https://github.com/emitter-io/go/pull/28/files

看起来你在使用Emitter的Go客户端库生成频道密钥时遇到了问题。根据你的代码片段,问题可能在于你没有正确订阅频道来接收消息。

让我提供一个完整的示例代码,展示如何正确生成密钥并订阅频道:

package main

import (
    "fmt"
    "time"
    "github.com/emitter-io/go/v2"
)

func main() {
    // 配置参数
    host := "tcp://broker.emitter.io:8080"
    masterKey := "your-master-key-here"
    channel := "your-channel/here/"
    ttl := 3600 // 密钥有效期(秒)

    // 创建客户端连接
    client, err := emitter.Connect(host, func(client *emitter.Client, msg emitter.Message) {
        fmt.Printf("收到消息: 主题='%s', 载荷='%s'\n", msg.Topic(), msg.Payload())
    })
    
    if err != nil {
        panic(fmt.Sprintf("连接失败: %v", err))
    }

    // 生成频道密钥
    key, err := client.GenerateKey(masterKey, channel, "rwls", ttl)
    if err != nil {
        panic(fmt.Sprintf("生成密钥失败: %v", err))
    }
    
    fmt.Printf("生成的密钥: %s\n", key)

    // 使用生成的密钥订阅频道
    err = client.Subscribe(key, channel, func(client *emitter.Client, msg emitter.Message) {
        fmt.Printf("订阅收到: 主题='%s', 载荷='%s'\n", msg.Topic(), msg.Payload())
    })
    
    if err != nil {
        panic(fmt.Sprintf("订阅失败: %v", err))
    }

    // 等待一段时间接收消息
    fmt.Println("等待接收消息...")
    time.Sleep(30 * time.Second)
    
    // 取消订阅
    client.Unsubscribe(key, channel)
    client.Disconnect()
}

关键点说明:

  1. 连接回调函数:你提供的连接回调只处理连接级别的消息,而不是特定频道的消息
  2. 订阅频道:生成密钥后,需要使用 client.Subscribe() 来订阅特定频道
  3. 密钥权限:确保你生成的密钥有正确的权限(“rwls” 表示读、写、列出、存储)
  4. 频道格式:确保频道格式正确,通常以斜杠结尾

如果你的问题仍然存在,请检查:

  • Master Key是否正确且有生成密钥的权限
  • 频道名称格式是否正确
  • 是否有其他客户端在向该频道发布消息
  • 网络连接是否正常
回到顶部