github => https://github.com/link1st/gowebsocket
文档: https://blog.csdn.net/m0_70556273/article/details/127306181
https://blog.csdn.net/u010750137/article/details/128439424
package mainimport ( "github.com/gin-gonic/gin" "github.com/gorilla/websocket" "net/http")//设置websocket//CheckOrigin避免跨站点的申请伪造var upGrader = websocket.Upgrader{ CheckOrigin: func(r *http.Request) bool { return true },}//websocket实现func ping(c *gin.Context) { //降级get申请为webSocket协定 ws, err := upGrader.Upgrade(c.Writer, c.Request, nil) if err != nil { return } defer ws.Close() //返回前敞开 for { //读取ws中的数据 mt, message, err := ws.ReadMessage() if err != nil { break } //写入ws数据 err = ws.WriteMessage(mt, message) if err != nil { break } }}func main() { r := gin.Default() r.GET("/ping", ping) r.Run(":12345")}
应用melody三方库
github: https://github.com/olahol/melody
package mainimport ( "github.com/gin-gonic/gin" "github.com/olahol/melody" "time")func main() { r := gin.Default() m := melody.New() //拜访地址: ws://127.0.0.1:5001/ws r.GET("/ws", func(c *gin.Context) { m.HandleRequest(c.Writer, c.Request) }) m.HandleMessage(func(s *melody.Session, msg []byte) { switch string(msg) { case "hello": s.Write([]byte("hi")) case "time": s.Write([]byte(time.Now().String())) case "exit": s.Write([]byte("Bye bye!")) s.Close() default: s.Write([]byte("Unknown Message")) } }) r.Run(":5001")}