From 33723334f9cf23b0e8541abc46597f26d74c97fa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=98=94=E5=BF=B5?= <1@72wo.cn> Date: Mon, 7 Jul 2025 19:58:23 +0800 Subject: [PATCH] =?UTF-8?q?feat(socket):=20=E5=A2=9E=E5=8A=A0=E8=BF=9E?= =?UTF-8?q?=E6=8E=A5=E6=95=B0=E7=BB=9F=E8=AE=A1=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在 Server 结构中添加 connected 字段,用于统计当前连接数 - 在 OnOpen 和 OnClose 事件处理函数中增加连接数的增减逻辑 - 添加 OnTick 方法,定期打印当前连接数 - 更新 ServerEvent 和 ServerOption 文件,集成新功能 --- common/socket/ServerEvent.go | 26 ++++++++++++++++++-------- common/socket/ServerOption.go | 1 + logic/controller/controller.go | 1 + logic/controller/login.go | 1 + logic/server.go | 13 +++++++++++-- 5 files changed, 32 insertions(+), 10 deletions(-) diff --git a/common/socket/ServerEvent.go b/common/socket/ServerEvent.go index 2a71bda0..f057dc97 100644 --- a/common/socket/ServerEvent.go +++ b/common/socket/ServerEvent.go @@ -3,6 +3,8 @@ package socket import ( "context" "log" + "sync/atomic" + "time" "blazing/common/data/entity" @@ -12,13 +14,15 @@ import ( ) func (s *Server) Boot() error { - err := gnet.Run(s, s.addr, + err := gnet.Run(s, s.network+"://"+s.addr, gnet.WithMulticore(true), + gnet.WithTicker(true), gnet.WithSocketRecvBuffer(s.bufferSize)) if err != nil { return err } - + // err := gnet.Run(s, s.network+"://"+s.addr, gnet.WithMulticore(s.multicore)) + // logging.Infof("server exits with error: %v", err) return nil } @@ -30,7 +34,8 @@ func (s *Server) Stop() error { } func (s *Server) OnClose(c gnet.Conn, _ error) (action gnet.Action) { - + atomic.AddInt64(&s.connected, -1) + //logging.Infof("conn[%v] disconnected", c.RemoteAddr().String()) v := c.Context().(*entity.ClientData) t := v.GetPlayer() if t != nil { @@ -42,6 +47,10 @@ func (s *Server) OnClose(c gnet.Conn, _ error) (action gnet.Action) { //关闭连接 return } +func (s *Server) OnTick() (delay time.Duration, action gnet.Action) { + logging.Infof("[connected-count=%v]", atomic.LoadInt64(&s.connected)) + return 3 * time.Second, gnet.None +} func (s *Server) OnBoot(eng gnet.Engine) gnet.Action { s.eng = eng @@ -50,6 +59,12 @@ func (s *Server) OnBoot(eng gnet.Engine) gnet.Action { return gnet.None } +func (s *Server) OnOpen(_ gnet.Conn) (out []byte, action gnet.Action) { + atomic.AddInt64(&s.connected, 1) + + return nil, gnet.None +} + func (s *Server) OnTraffic(conn gnet.Conn) (action gnet.Action) { if conn.Context() == nil { conn.SetContext(entity.NewClientData()) //注入data @@ -96,11 +111,6 @@ func (s *Server) parser(c gnet.Conn, line []byte) { //todo 这里待实现注入player实体 s.handler.Handle(c, line) } -func (s *Server) Start() { - - err := gnet.Run(s, s.network+"://"+s.addr, gnet.WithMulticore(s.multicore)) - logging.Infof("server exits with error: %v", err) -} // CROSS_DOMAIN 定义跨域策略文件内容 const CROSS_DOMAIN = "\x00" diff --git a/common/socket/ServerOption.go b/common/socket/ServerOption.go index 48f7fa69..606231df 100644 --- a/common/socket/ServerOption.go +++ b/common/socket/ServerOption.go @@ -13,6 +13,7 @@ type Server struct { gnet.BuiltinEventEngine eng gnet.Engine addr string + connected int64 network string multicore bool bufferSize int diff --git a/logic/controller/controller.go b/logic/controller/controller.go index fddae933..d0424a8f 100644 --- a/logic/controller/controller.go +++ b/logic/controller/controller.go @@ -24,6 +24,7 @@ import ( var Maincontroller = NewController() //注入service // 分发cmd逻辑实现Controller type Controller struct { + //connected int64 //统计连接数 Port uint32 RPCClient struct { Kick func(int32) error diff --git a/logic/controller/login.go b/logic/controller/login.go index 5141b0e4..fc065eb8 100644 --- a/logic/controller/login.go +++ b/logic/controller/login.go @@ -18,6 +18,7 @@ func (h *Controller) Login(data login.LoginSidInfo, c gnet.Conn) []byte { //这 h.RPCClient.UserLogin(int32(h.Port), int32(data.Head.UserID)) //初始化用户登录 service.SetPlayer(c, data.Head.UserID) + } t1, _ := hex.DecodeString("0000045D37000003E9000186A600000000000186A6683F89CF6E69656F0000000000000000000000000008000F00000000000000000000000000000000000000000000000000000001000001DB0000018B000000000000A8C000000000000000000000000000000000000000080001388000000001000000017FFFFFFF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF03030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030000000000000000000000000000000000000064000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000001FFFFFFFF000000004E4F4E4F0000000000000000000000000000000000000001000000010000000100000001000000010000000100000001000000000003030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030000000100000064000000000000000000000000000000000000001F000000000000006400000000000093F4000093F4000000D5000000F7000000AD00000088000000920000008C0000009C00000000000000000000000000000000000000000000000000000004000027900000001B00004E6200000014000028380000002800004E3E0000002368493DC60000000000000000000000000000000000000000000100000000000000A937000007D1000186A600000000000186A66E69656F00000000000000000000000000000000000000000000000F0000000000000000000001DB0000018B0000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000FFFFFFFF0000000000000001000000000000000000000000000000000000000000000000000000000000000000000000") diff --git a/logic/server.go b/logic/server.go index 1eaee018..301f7898 100644 --- a/logic/server.go +++ b/logic/server.go @@ -80,14 +80,23 @@ func Start(serverid uint32) { //go rpc.StartClient(uint16(serverid), &controller.Maincontroller) service.NewLoginServiceService().SetServerID(serverid, gconv.Uint16(port), t) - socket.NewServer(socket.WithCORS(), socket.WithPort(port), socket.WithSocketHandler(head)).Start() + socket. + NewServer( + socket.WithCORS(), + socket.WithPort(port), + + socket.WithSocketHandler(head)). + Boot() } else { go rpc.StartServer() //go rpcserver() //对login tcp启动 //ants.Submit(rpcserver) - socket.NewServer(socket.WithCORS(), socket.WithPort(defaultPort), socket.WithSocketHandler(head)).Start() + socket.NewServer( + socket.WithCORS(), + socket.WithPort(defaultPort), + socket.WithSocketHandler(head)).Boot() } }