Files
service-gateway/app/websocket.go

60 lines
1.2 KiB
Go

package app
import (
"fmt"
"git.hlsq.asia/mmorpg/service-common/log"
"git.hlsq.asia/mmorpg/service-common/module"
"git.hlsq.asia/mmorpg/service-common/net/socket/websocket"
"git.hlsq.asia/mmorpg/service-gateway/config"
"git.hlsq.asia/mmorpg/service-gateway/internal/net/ws_gateway"
"github.com/panjf2000/gnet/v2"
"sync"
"time"
)
// ModuleWebsocketServer Websocket服务模块
type ModuleWebsocketServer struct {
module.DefaultModule
wg *sync.WaitGroup
server *websocket.WSServer
}
func (m *ModuleWebsocketServer) Init() error {
m.wg = &sync.WaitGroup{}
m.server = websocket.NewWSServer(
&ws_gateway.GatewayWsServer{},
log.GetLogger().Named("ws_server"),
5*time.Second,
)
return nil
}
func (m *ModuleWebsocketServer) Start(ready *sync.WaitGroup) error {
m.wg.Add(1)
go func() {
defer m.wg.Done()
ready.Done()
_ = m.server.Run(
fmt.Sprintf("tcp4://0.0.0.0:%v", config.Get().Serve.Socket.Web.Port),
true,
0,
gnet.TCPNoDelay,
64*1024,
64*1024,
true,
false,
true,
log.GetLogger().Named("GNET"),
)
}()
return nil
}
func (m *ModuleWebsocketServer) Stop() error {
if err := m.server.Stop(); err != nil {
log.Errorf("stop websocket server failed: %v", err)
}
m.wg.Wait()
return nil
}