diff --git a/ws/wsConn.go b/ws/wsConn.go index dc1f531..af6186b 100644 --- a/ws/wsConn.go +++ b/ws/wsConn.go @@ -94,8 +94,14 @@ func (c *wsConnect) close() { // 循环从websocket中读取消息放入到读队列中 func (c *wsConnect) readWsLoop() { - //c.wsConn.SetReadLimit(maxMessageSize) + c.wsConn.SetReadLimit(maxMessageSize) _ = c.wsConn.SetReadDeadline(time.Now().Add(pongWait)) + c.wsConn.SetPongHandler(func(string) error { + log.Debug(c.Log("received pong. from client")) + _ = c.wsConn.SetReadDeadline(time.Now().Add(pongWait)) + return nil + }) + for { // 读一个message msgType, data, err := c.wsConn.ReadMessage() @@ -110,7 +116,7 @@ func (c *wsConnect) readWsLoop() { case websocket.PingMessage: _ = c.sendMsg(websocket.PongMessage, []byte("pong")) case websocket.PongMessage: - // _ = c.sendMsg(websocket.PingMessage, []byte("ping")) + log.Debug(c.Log("received pong from client")) case websocket.CloseMessage: code := websocket.CloseNormalClosure reason := "" diff --git a/ws/wsServer.go b/ws/wsServer.go index 886b418..b0b9d24 100644 --- a/ws/wsServer.go +++ b/ws/wsServer.go @@ -5,6 +5,7 @@ import ( "github.com/fox/fox/log" "github.com/gorilla/websocket" "net/http" + "runtime" "time" ) @@ -56,11 +57,24 @@ func (s *WsServer) wsHandle(w http.ResponseWriter, r *http.Request) { wsConn := newWsConnect(conn, s.onDisconnect) wsMgr.Add(wsConn) log.DebugF("当前连接数:%v", wsMgr.Count()) + log.DebugF("新连接id:%v %v", wsConn.Id(), wsConn.Name()) ksync.GoSafe(func() { wsConn.handle(s.onMessage) }, nil) ksync.GoSafe(wsConn.readWsLoop, nil) ksync.GoSafe(wsConn.writeWsLoop, nil) } +func (s *WsServer) debugGoroutineNum() { + ch := time.Tick(5 * time.Minute) + go func() { + for { + select { + case <-ch: + log.DebugF("当前协程数量:%v", runtime.NumGoroutine()) + } + } + }() +} + func (s *WsServer) Run() { router := http.NewServeMux() router.HandleFunc("/", s.wsHandle) @@ -71,6 +85,7 @@ func (s *WsServer) Run() { log.Error(err.Error()) } }, nil) + s.debugGoroutineNum() } func (s *WsServer) SetUserId(connId uint32, userId int64) {