diff --git a/znet/server.go b/znet/server.go index fe78cda82eb31b23a38db9b3076e5e87c914b694..60f4b0f9ceef7fe90a35d211545c92bfd6b528e9 100644 --- a/znet/server.go +++ b/znet/server.go @@ -255,8 +255,8 @@ func (s *Server) ListenTcpConn() { } func (s *Server) ListenWebsocketConn() { - - http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { + mux := http.NewServerMux() + mux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { // 1. Check if the server has reached the maximum allowed number of connections // (设置服务器最大连接控制,如果超过最大连接,则等待) if s.ConnMgr.Len() >= zconf.GlobalObject.MaxConn { @@ -297,10 +297,19 @@ func (s *Server) ListenWebsocketConn() { go s.StartConn(wsConn) }) - - err := http.ListenAndServe(fmt.Sprintf("%s:%d", s.IP, s.WsPort), nil) - if err != nil { - panic(err) + server := &http.Server{Addr: fmt.Sprintf("%s:%d", s.IP, s.WsPort), Handle: mux} + go func(){ + err := server.ListenAndServe() + if err != nil { + zlog.Ins().ErrorF("listener exit err: %v", err) + } + } + select { + case <-s.exitChan: + err := server.Close() + if err != nil { + zlog.Ins().ErrorF("listener close err: %v", err) + } } }