修改websocket

This commit is contained in:
liuxiaobo 2025-06-01 10:33:41 +08:00
parent 028190fc5b
commit 02dd61e073
2 changed files with 23 additions and 2 deletions

View File

@ -94,8 +94,14 @@ func (c *wsConnect) close() {
// 循环从websocket中读取消息放入到读队列中 // 循环从websocket中读取消息放入到读队列中
func (c *wsConnect) readWsLoop() { func (c *wsConnect) readWsLoop() {
//c.wsConn.SetReadLimit(maxMessageSize) c.wsConn.SetReadLimit(maxMessageSize)
_ = c.wsConn.SetReadDeadline(time.Now().Add(pongWait)) _ = 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 { for {
// 读一个message // 读一个message
msgType, data, err := c.wsConn.ReadMessage() msgType, data, err := c.wsConn.ReadMessage()
@ -110,7 +116,7 @@ func (c *wsConnect) readWsLoop() {
case websocket.PingMessage: case websocket.PingMessage:
_ = c.sendMsg(websocket.PongMessage, []byte("pong")) _ = c.sendMsg(websocket.PongMessage, []byte("pong"))
case websocket.PongMessage: case websocket.PongMessage:
// _ = c.sendMsg(websocket.PingMessage, []byte("ping")) log.Debug(c.Log("received pong from client"))
case websocket.CloseMessage: case websocket.CloseMessage:
code := websocket.CloseNormalClosure code := websocket.CloseNormalClosure
reason := "" reason := ""

View File

@ -5,6 +5,7 @@ import (
"github.com/fox/fox/log" "github.com/fox/fox/log"
"github.com/gorilla/websocket" "github.com/gorilla/websocket"
"net/http" "net/http"
"runtime"
"time" "time"
) )
@ -56,11 +57,24 @@ func (s *WsServer) wsHandle(w http.ResponseWriter, r *http.Request) {
wsConn := newWsConnect(conn, s.onDisconnect) wsConn := newWsConnect(conn, s.onDisconnect)
wsMgr.Add(wsConn) wsMgr.Add(wsConn)
log.DebugF("当前连接数:%v", wsMgr.Count()) log.DebugF("当前连接数:%v", wsMgr.Count())
log.DebugF("新连接id:%v %v", wsConn.Id(), wsConn.Name())
ksync.GoSafe(func() { wsConn.handle(s.onMessage) }, nil) ksync.GoSafe(func() { wsConn.handle(s.onMessage) }, nil)
ksync.GoSafe(wsConn.readWsLoop, nil) ksync.GoSafe(wsConn.readWsLoop, nil)
ksync.GoSafe(wsConn.writeWsLoop, 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() { func (s *WsServer) Run() {
router := http.NewServeMux() router := http.NewServeMux()
router.HandleFunc("/", s.wsHandle) router.HandleFunc("/", s.wsHandle)
@ -71,6 +85,7 @@ func (s *WsServer) Run() {
log.Error(err.Error()) log.Error(err.Error())
} }
}, nil) }, nil)
s.debugGoroutineNum()
} }
func (s *WsServer) SetUserId(connId uint32, userId int64) { func (s *WsServer) SetUserId(connId uint32, userId int64) {