因此,我对该示例进行了一些更改以使其与gin-gonic一起使用
https://github.com/utiq/go-in-5-minutes/tree/master/episode4

许多客户端之间的Websocket握手成功。问题在于,当客户端发送消息时,该消息不会传播到其余客户端。

最佳答案

我看了你的episode4commit changes

我的观察如下:

  • 您正在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)
    })
    

    09-25 18:09