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
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 |
|
}
|
|
|