package gws_server import ( "fmt" "github.com/gin-gonic/gin" "github.com/lxzan/gws" "net/http" "sonet/pkg/utils/resp" ) // GwsServer https://segmentfault.com/a/1190000044065884 type GwsServer struct { upgrader *gws.Upgrader gwsHandler *GwsHandler } func NewGwsServer(gwsHandler *GwsHandler) *GwsServer { return &GwsServer{ gwsHandler: gwsHandler, } } func (s *GwsServer) Init() { s.upgrader = gws.NewUpgrader(s.gwsHandler, &gws.ServerOption{ ReadAsyncEnabled: true, // Parallel message processing CompressEnabled: true, // Enable compression Recovery: gws.Recovery, // Exception recovery }) } func (s *GwsServer) Run(port int) (err error) { server := gin.Default() server.GET("/ws", func(c *gin.Context) { conn, err := s.upgrader.Upgrade(c.Writer, c.Request) if err != nil { c.JSON(http.StatusBadRequest, resp.Error(err.Error())) return } go conn.ReadLoop() }) err = server.Run(fmt.Sprintf(":%d", port)) if err != nil { return } return }