in internal/service/server.go [81:108]
func (s *Server) Serve() {
mux := http.NewServeMux()
mux.HandleFunc("/", s.handleRequest)
server := &http.Server{
Handler: mux,
ReadTimeout: defaultRequestTimeout,
WriteTimeout: defaultRequestTimeout,
}
go func() {
s.loggerWrapper.Info("server listening on: %s", s.listener.Addr().String())
if err := server.Serve(s.listener); err != nil {
s.loggerWrapper.Error("server listening err: %v", err)
os.Exit(1)
}
}()
// 监听中断信号以优雅地关闭服务器
signals := make(chan os.Signal, 1)
signal.Notify(signals, syscall.SIGINT, syscall.SIGTERM)
<-signals
s.loggerWrapper.Info("shutting down the server")
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
defer cancel()
if err := server.Shutdown(ctx); err != nil {
s.loggerWrapper.Error("server shutdown Failed :%v", err)
}
s.loggerWrapper.Info("server exiting")
}