Golang Redis PubSub 发送重复消息

问题描述

我正在尝试使用 golang 上的 redis 发布/订阅实现构建一个功能 但是对于每个连接到服务器 (WebSocket) 的客户端,发布的消息数量都会翻倍。

func (c client) Subscribe() {
    con := initRedis()
    defer con.Close()
    psc := redis.PubSubConn{Conn: con}
    defer psc.Close()
    psc.Subscribe(c.Channel)
    for {
    switch v := psc.Receive().(type) {
    case redis.Message:
        fmt.Printf("%s: message: %s\n",v.Channel,v.Data)
        broadcast <- map[string]string{
            "channel": v.Channel,"message": string(v.Data),}
    case redis.Subscription:
        fmt.Printf("%s: %s %d\n",v.Kind,v.Count)
    case error:
        log.Println(v)
        psc.Unsubscribe()
    }
}
}

func (m Message) Publish() {
c := initRedis()
defer c.Close()
reply,err := c.Do("PUBLISH",m.Channel,m.Msg)
if err != nil {
    log.Println(err)
}
fmt.Println("Publishing",m,reply)
}

func initRedis() redis.Conn {
    if err := godotenv.Load(); err != nil {
        panic(err)
    }
    // fmt.Println(os.Getenv("REdis_URL"))
    c,err := redis.DialURL(os.Getenv("REdis_URL"),redis.DialTLSSkipVerify(true))
    if err != nil {
        panic(err)
    }
    // defer c.Close()

    return c
}

如何停止重复? 或者是什么导致了重复。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)