You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

47 lines
1013 B

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
}