diff --git a/app/mix/cmd_offline/main.go b/app/mix/cmd_offline/main.go index 71aa878e..a66d5056 100644 --- a/app/mix/cmd_offline/main.go +++ b/app/mix/cmd_offline/main.go @@ -116,7 +116,7 @@ func main() { Addr: fmt.Sprintf("%s:%d", ip, port), Handler: router, } - httpserver.StartHttpServer(srv, cfg.OfflineServer, ip, port) + httpserver.StartOfflineHttpServer(srv, cfg.OfflineServer) } func PrintAndExit(msg string) { diff --git a/library/httpserver/httpserver.go b/library/httpserver/httpserver.go index 6ed1e7fa..3b25fed7 100644 --- a/library/httpserver/httpserver.go +++ b/library/httpserver/httpserver.go @@ -100,3 +100,31 @@ func setServerStatusFD(status string) { } logger.Info("SetServerStatusFD success: %v", status) } + +func StartOfflineHttpServer(srv *http.Server, cfg *configcenter.DefaultConfig) { + go func() { + if err := srv.ListenAndServe(); err != nil && err != http.ErrServerClosed { + logger.Fatal("listen: %v", err) + } + }() + + logger.Info("Server %s start at %s", cfg.App.AppName, srv.Addr) + + quit := make(chan os.Signal) + signal.Notify(quit, syscall.SIGINT, syscall.SIGTERM) + <-quit + logger.Info("Shutdown Server ...") + + ctx, cancel := context.WithTimeout(context.Background(), 1*time.Second) + defer cancel() + if err := srv.Shutdown(ctx); err != nil { + log.Fatal("Server Shutdown:", err) + } + + select { + case <-ctx.Done(): + logger.Info("timeout of 1 seconds.") + } + + logger.Info("Server exited") +}