| | |
| | | package main |
| | | |
| | | import ( |
| | | "context" |
| | | "net/http" |
| | | "os" |
| | | "os/signal" |
| | | "silkserver/conf" |
| | | "silkserver/constvar" |
| | | "silkserver/models" |
| | | "silkserver/pkg/logx" |
| | | "silkserver/router" |
| | |
| | | logx.Errorf("db init error! ", err.Error()) |
| | | return |
| | | } |
| | | |
| | | go shutdown() |
| | | logx.Infof("server start serve...") |
| | | server := &http.Server{ |
| | | Addr: ":" + conf.WebConf.Port, |
| | |
| | | ReadTimeout: 5 * time.Second, |
| | | WriteTimeout: 5 * time.Second, |
| | | } |
| | | |
| | | go shutdown(server) |
| | | logx.Error(server.ListenAndServe().Error()) |
| | | } |
| | | |
| | | func shutdown() { |
| | | func shutdown(server *http.Server) { |
| | | quit := make(chan os.Signal, 1) |
| | | signal.Notify(quit, syscall.SIGKILL, syscall.SIGQUIT, syscall.SIGINT, syscall.SIGTERM) |
| | | <-quit |
| | | |
| | | _ = constvar.GrpcClient.Close() |
| | | logx.Infof("server exited...") |
| | | os.Exit(0) |
| | | // 创建一个上下文,设置超时时间 |
| | | ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) |
| | | defer cancel() |
| | | logx.Infof("server exiting...") |
| | | if err := server.Shutdown(ctx); err != nil { |
| | | logx.Warnf("服务优雅退出失败: %v", err) |
| | | return |
| | | } |
| | | logx.Infof("server exited success") |
| | | } |