Files
emqxboard/board.go
Sakurasan d11241960a first
2023-04-06 22:40:20 +08:00

45 lines
949 B
Go

package main
import (
"context"
"emqxboard/router"
"log"
"os"
"os/signal"
"syscall"
"time"
"github.com/fvbock/endless"
)
func main() {
// 创建一个带超时的context
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
defer cancel()
// 创建 HTTP 服务器
server := endless.NewServer(":8080", router.MapRoutes())
// 启动 HTTP 服务器
go func() {
if err := server.ListenAndServe(); err != nil {
log.Printf("Server error: %v\n", err)
}
}()
// 等待中断信号来优雅地关闭服务器
quit := make(chan os.Signal, 1)
signal.Notify(quit, syscall.SIGINT, syscall.SIGQUIT, syscall.SIGTERM)
<-quit
log.Println("Shutdown Server ...")
// 设置超时时间来强制关闭服务器
timeoutCtx, cancel := context.WithTimeout(ctx, 5*time.Second)
defer cancel()
if err := server.Shutdown(timeoutCtx); err != nil {
log.Fatal("Server Shutdown:", err)
}
log.Println("Server exiting")
}