【发布时间】:2020-01-07 01:54:44
【问题描述】:
我对 Go 非常陌生,并且发现自己使用套接字作为我的第一个项目。这是一个多余的问题,但我无法理解如何将 websocket 更新发送到 Go 中的特定通道(使用 Gorilla)。
我正在使用code sample from this link
这种方法。但未能修改以将消息发送到特定频道。
这是我的示例代码 main.go
func main() {
flag.Parse()
hub := newHub()
go hub.run()
http.HandleFunc("/ws", func(w http.ResponseWriter, r *http.Request) {
fmt.Println(hub)
serveWs(hub, w, r)
})
err := http.ListenAndServe(*addr, nil)
if err != nil {
log.Fatal("ListenAndServe: ", err)
}
}
还有另外两个文件叫 hub.go 和 client.go 我认为hub.go到这里可以做点什么
return &Hub{
broadcast: make(chan []byte),
register: make(chan *Client),
unregister: make(chan *Client),
clients: make(map[*Client]bool),
}
我应该从这里改变什么?
更新
我想要做的是我有一个用 go 编写的套接字服务器。 现在假设我们有许多客户端在服务器上使用特定的 URL(如 wss://abc.com/wss1 或者可能是 wss://abc.com/wss2
现在,如果客户端 wss1 向服务器发送消息,服务器将发出此消息,所有客户端都在监听 url wss1 而不是 wss2,反之亦然。
到目前为止,无论 wss1 还是 wss2,我都能够向所有客户端进行广播。 希望我说清楚了。
【问题讨论】:
-
其实这不是重复的。我想发送所有正在收听特定频道的客户
-
在更高层次上描述你想要做什么。例如,正在实施聊天室、一对一聊天还是其他?当您说频道时,您是指链接到的示例中的 Go 频道之一,还是指 Slack 中的聊天室或频道?
-
@CeriseLimón 我已经更新了我的问题。请看一下。任何帮助将不胜感激。