gin-gonic 和 gorilla/websocket 不传播消息

gin-gonic and gorilla/websocket does not propagate message

所以我对这个例子做了一些修改,让它与 gin-gonic 一起工作 https://github.com/utiq/go-in-5-minutes/tree/master/episode4

多个客户端之间的websocket握手成功。问题是当客户端发送消息时,消息不会传播到其余客户端。

我看过你的 commit changes of episode4

我的观察如下:

  • 您正在为 stream handler 的每个传入请求创建 hub 实例。 hub 用于跟踪连接等的实例,因此您在每次请求时都会丢失它。
  • 您已删除 index/home 处理程序(可能您想转换为 gin 处理程序或其他内容,我不知道)。

现在,让我们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)
})