From 1645ae47df879067ba286affec39e5bed168fa02 Mon Sep 17 00:00:00 2001 From: kercylan98 Date: Mon, 15 Jan 2024 14:45:14 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=20server=20=E5=8C=85?= =?UTF-8?q?=20None=20=E7=BD=91=E7=BB=9C=E7=B1=BB=E5=9E=8B=E5=90=AF?= =?UTF-8?q?=E5=8A=A8=E9=98=BB=E5=A1=9E=E7=9A=84=E9=97=AE=E9=A2=98=E3=80=82?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E4=BC=A0=E5=85=A5=E4=B8=8D=E6=94=AF=E6=8C=81?= =?UTF-8?q?=E7=BD=91=E7=BB=9C=E7=B1=BB=E5=9E=8B=E5=B0=86=E5=AF=BC=E8=87=B4?= =?UTF-8?q?=20panic=20=E7=9A=84=E7=89=B9=E6=80=A7=E3=80=82=E4=BC=98?= =?UTF-8?q?=E5=8C=96=20WebSocket=20=E6=9C=8D=E5=8A=A1=E5=99=A8=E5=B0=86?= =?UTF-8?q?=E4=B8=8D=E5=86=8D=E4=BD=BF=E7=94=A8=20http.DefaultMuxServer?= =?UTF-8?q?=EF=BC=8C=E8=BD=AC=E8=80=8C=E4=BD=BF=E7=94=A8=20http.NewServeMu?= =?UTF-8?q?x?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/network.go | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/server/network.go b/server/network.go index 3e5c1f0..7fadec2 100644 --- a/server/network.go +++ b/server/network.go @@ -103,6 +103,7 @@ func (n Network) adaptation(srv *Server) <-chan error { switch n { case NetworkNone: srv.addr = "-" + state <- nil case NetworkTcp: n.gNetMode(state, srv) case NetworkTcp4: @@ -125,6 +126,8 @@ func (n Network) adaptation(srv *Server) <-chan error { n.kcpMode(state, srv) case NetworkGRPC: n.grpcMode(state, srv) + default: + state <- fmt.Errorf("unsupported network mode: %s", n) } return state } @@ -248,7 +251,8 @@ func (n Network) websocketMode(state chan<- error, srv *Server) { if srv.websocketUpgrader == nil { srv.websocketUpgrader = DefaultWebsocketUpgrader() } - http.HandleFunc(pattern, func(writer http.ResponseWriter, request *http.Request) { + mux := http.NewServeMux() + mux.HandleFunc(pattern, func(writer http.ResponseWriter, request *http.Request) { ip := request.Header.Get("X-Real-IP") ws, err := srv.websocketUpgrader.Upgrade(writer, request, nil) if err != nil { @@ -304,17 +308,17 @@ func (n Network) websocketMode(state chan<- error, srv *Server) { srv.PushPacketMessage(conn, messageType, packet) } }) - go func(lis *listener) { + go func(lis *listener, mux *http.ServeMux) { var err error if len(lis.srv.certFile)+len(lis.srv.keyFile) > 0 { - err = http.ServeTLS(lis, nil, lis.srv.certFile, lis.srv.keyFile) + err = http.ServeTLS(lis, mux, lis.srv.certFile, lis.srv.keyFile) } else { - err = http.Serve(lis, nil) + err = http.Serve(lis, mux) } if err != nil { super.TryWriteChannel(lis.state, err) } - }((&listener{srv: srv, Listener: l, state: state}).init()) + }((&listener{srv: srv, Listener: l, state: state}).init(), mux) } // IsSocket 返回当前服务器的网络模式是否为 Socket 模式