package servers import ( "gogs.tyduyong.com/duyong/dy-admin/internal/iam/config" "os" "os/signal" "syscall" ) // APIServer 管理本服务开放的所有端口 type APIServer struct { gRPCAPIServer *grpcAPIServer httpAPIServer *httpAPIServer } // PreparedAPIServer 必须得到此实例,才能run type PreparedAPIServer struct { *APIServer } func CreateAPIServer(cfg *config.Config) (*APIServer, error) { return &APIServer{ gRPCAPIServer: newRpcServer(cfg), httpAPIServer: newHttpServer(cfg), }, nil } func (s *APIServer) PrepareRun() *PreparedAPIServer { // 服务运行前操作 return &PreparedAPIServer{s} } func (ps *PreparedAPIServer) Run() error { // 启动服务 ps.gRPCAPIServer.Run() ps.httpAPIServer.Run() // 监听信号 2和9 sigCh := make(chan os.Signal, 1) signal.Notify(sigCh, syscall.SIGINT, syscall.SIGKILL) <-sigCh // 停止服务 ps.gRPCAPIServer.Close() ps.httpAPIServer.Close() return nil }