所以我对这个例子做了一些更改,使其适用于杜松子酒https://github.com/utiq/go-in-5-minutes/tree/master/episode4
许多客户端之间的 websocket 握手是成功的。问题是,当客户端发送消息时,消息不会传播到其余客户端。
我看了一下你对episode4
的提交更改。
我的观察如下:
- 您将在流处理程序的每个传入请求上创建
hub
实例。hub
用于跟踪连接等的实例,因此您在每次请求时都会丢失它。 - 您已经删除了索引/家庭处理程序(可能是您想转换为杜松子酒处理程序或其他东西,我不知道(。
现在,让我们episode4
付诸行动。请进行以下更改(一如既往地根据需要进行改进(。我已经通过以下更改测试了您的episode4
,它工作正常。
使/ws
处理程序在server.go
上工作:
h := newHub()
wsh := wsHandler{h: h}
r.GET("/ws", func(c *gin.Context) {
wsh.ServeHTTP(c.Writer, c.Request)
})
删除connection.go
上的流处理程序:
func stream(c *gin.Context) {
h := newHub()
wsHandler{h: h}.ServeHTTP(c.Writer, c.Request)
}
在server.go
上添加索引 HTML 处理程序:(将其添加到我最后的测试第 4 集(
r.SetHTMLTemplate(template.Must(template.ParseFiles("index.html")))
r.GET("/", func(c *gin.Context) {
c.HTML(200, "index.html", nil)
})