From d7c4cfb1ef11b7e35d263689145aaa9d2646a0d1 Mon Sep 17 00:00:00 2001 From: boyce <6549168@qq.com> Date: Wed, 12 Nov 2025 16:46:35 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96ws=E8=B6=85=E6=97=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- network/ws_server.go | 37 ++++++++++++++++-------- sysmodule/netmodule/wsmodule/WSModule.go | 11 ++++++- 2 files changed, 35 insertions(+), 13 deletions(-) diff --git a/network/ws_server.go b/network/ws_server.go index e17494f..8623faf 100644 --- a/network/ws_server.go +++ b/network/ws_server.go @@ -3,12 +3,13 @@ package network import ( "crypto/tls" "errors" - "github.com/duanhf2012/origin/v2/log" - "github.com/gorilla/websocket" "net" "net/http" "sync" "time" + + "github.com/duanhf2012/origin/v2/log" + "github.com/gorilla/websocket" ) type WSServer struct { @@ -16,13 +17,16 @@ type WSServer struct { MaxConnNum int PendingWriteNum int MaxMsgLen uint32 - HTTPTimeout time.Duration CertFile string KeyFile string NewAgent func(*WSConn) Agent ln net.Listener handler *WSHandler messageType int + + HandshakeTimeout time.Duration + ReadTimeout time.Duration + WriteTimeout time.Duration } type WSHandler struct { @@ -73,14 +77,14 @@ func (handler *WSHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { } handler.conns[conn] = struct{}{} handler.mutexConns.Unlock() - c,ok:=conn.NetConn().(*net.TCPConn) + c, ok := conn.NetConn().(*net.TCPConn) if !ok { - tlsConn,ok := conn.NetConn().(*tls.Conn) + tlsConn, ok := conn.NetConn().(*tls.Conn) if !ok { log.Error("conn error") return } - c,ok = tlsConn.NetConn().(*net.TCPConn) + c, ok = tlsConn.NetConn().(*net.TCPConn) if !ok { log.Error("conn error") return @@ -127,10 +131,19 @@ func (server *WSServer) Start() error { server.MaxMsgLen = 4096 log.Info("invalid MaxMsgLen", log.Uint32("reset", server.MaxMsgLen)) } - if server.HTTPTimeout <= 0 { - server.HTTPTimeout = 10 * time.Second - log.Info("invalid HTTPTimeout", log.Duration("reset", server.HTTPTimeout)) + if server.HandshakeTimeout <= 0 { + server.HandshakeTimeout = 15 * time.Second + log.Info("invalid HandshakeTimeout", log.Duration("reset", server.HandshakeTimeout)) } + if server.ReadTimeout <= 0 { + server.ReadTimeout = 15 * time.Second + log.Info("invalid ReadTimeout", log.Duration("reset", server.ReadTimeout)) + } + if server.WriteTimeout <= 0 { + server.WriteTimeout = 15 * time.Second + log.Info("invalid WriteTimeout", log.Duration("reset", server.WriteTimeout)) + } + if server.NewAgent == nil { log.Error("NewAgent must not be nil") return errors.New("NewAgent must not be nil") @@ -159,7 +172,7 @@ func (server *WSServer) Start() error { conns: make(WebsocketConnSet), messageType: server.messageType, upgrader: websocket.Upgrader{ - HandshakeTimeout: server.HTTPTimeout, + HandshakeTimeout: server.HandshakeTimeout, CheckOrigin: func(_ *http.Request) bool { return true }, }, } @@ -167,8 +180,8 @@ func (server *WSServer) Start() error { httpServer := &http.Server{ Addr: server.Addr, Handler: server.handler, - ReadTimeout: server.HTTPTimeout, - WriteTimeout: server.HTTPTimeout, + ReadTimeout: server.ReadTimeout, + WriteTimeout: server.WriteTimeout, MaxHeaderBytes: 1024, } diff --git a/sysmodule/netmodule/wsmodule/WSModule.go b/sysmodule/netmodule/wsmodule/WSModule.go index df54451..163b4ef 100644 --- a/sysmodule/netmodule/wsmodule/WSModule.go +++ b/sysmodule/netmodule/wsmodule/WSModule.go @@ -2,13 +2,15 @@ package wsmodule import ( "fmt" + "sync" + "time" + "github.com/duanhf2012/origin/v2/event" "github.com/duanhf2012/origin/v2/log" "github.com/duanhf2012/origin/v2/network" "github.com/duanhf2012/origin/v2/network/processor" "github.com/duanhf2012/origin/v2/service" "go.mongodb.org/mongo-driver/bson/primitive" - "sync" ) type WSModule struct { @@ -36,6 +38,10 @@ type WSCfg struct { LittleEndian bool //是否小端序 KeyFile string CertFile string + + HandshakeTimeoutSecond time.Duration + ReadTimeoutSecond time.Duration + WriteTimeoutSecond time.Duration } type WSPackType int8 @@ -63,6 +69,9 @@ func (ws *WSModule) OnInit() error { ws.WSServer.PendingWriteNum = ws.wsCfg.PendingWriteNum ws.WSServer.MaxMsgLen = ws.wsCfg.MaxMsgLen ws.WSServer.Addr = ws.wsCfg.ListenAddr + ws.WSServer.HandshakeTimeout = ws.wsCfg.HandshakeTimeoutSecond*time.Second + ws.WSServer.ReadTimeout = ws.wsCfg.ReadTimeoutSecond*time.Second + ws.WSServer.WriteTimeout = ws.wsCfg.WriteTimeoutSecond*time.Second if ws.wsCfg.KeyFile != "" && ws.wsCfg.CertFile != "" { ws.WSServer.KeyFile = ws.wsCfg.KeyFile