如何使用 Go 和 gorilla websocket 仅发送给一个客户端而不是所有客户端

Ale*_*lex 5 go websocket

我正在尝试用 Go 学习 websocket。我一直在研究 gorilla websocket 的示例。

我已经查看了这两个示例,展示了如何使用 gorilla websocket:

https://github.com/gorilla/websocket/tree/master/examples

https://www.youtube.com/watch?v=ysAZ_oqPOo0

所有这些示例都展示了如何连接到 websocket 服务器、发送和接收文本。但我不明白的是你如何可以只发送给一个客户。因为在现实世界的应用程序中,您将拥有用户,并且我们不希望所有用户都收到相同的消息和相同的数据。有没有办法让我获得连接的唯一 ID,我可以将其保存在像 Redis 这样的数据库中,并将其链接到同一数据库中的用户 ID,然后使用该 Websocket ID 发送回特定客户端(如果可以)用户 ID 收到消息或通知?这是一个人会如何去做并实现这样的事情吗?如果是这样的话,我该怎么办?

Ron*_*Dev 0

有没有办法让我获得连接的唯一 ID,我可以将其保存在像 Redis 这样的数据库中,并将其链接到同一数据库中的用户 ID,然后使用该 WebSocket ID 发送回特定客户端(如果可以)用户 ID 收到消息或通知?

当然!用户注册时可以自行生成Id。connection只需在结构体中添加 userId 字段即可

在聊天示例中,您有集线器,其中包含连接池。该池用于向所有用户广播消息:

case m := <-h.broadcast:
    for c := range h.connections {
        select {
        case c.send <- m:
        default:
            close(c.send)
            delete(h.connections, c)
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

所以就这样吧。您应该制作发送私人消息的方法,取决于 userId