servers.go 953 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. package servers
  2. import (
  3. "gogs.tyduyong.com/duyong/dy-admin/internal/iam/config"
  4. "os"
  5. "os/signal"
  6. "syscall"
  7. )
  8. // APIServer 管理本服务开放的所有端口
  9. type APIServer struct {
  10. gRPCAPIServer *grpcAPIServer
  11. httpAPIServer *httpAPIServer
  12. }
  13. // PreparedAPIServer 必须得到此实例,才能run
  14. type PreparedAPIServer struct {
  15. *APIServer
  16. }
  17. func CreateAPIServer(cfg *config.Config) (*APIServer, error) {
  18. return &APIServer{
  19. gRPCAPIServer: newRpcServer(cfg),
  20. httpAPIServer: newHttpServer(cfg),
  21. }, nil
  22. }
  23. func (s *APIServer) PrepareRun() *PreparedAPIServer {
  24. // 服务运行前操作
  25. return &PreparedAPIServer{s}
  26. }
  27. func (ps *PreparedAPIServer) Run() error {
  28. // 启动服务
  29. ps.gRPCAPIServer.Run()
  30. ps.httpAPIServer.Run()
  31. // 监听信号 2和9
  32. sigCh := make(chan os.Signal, 1)
  33. signal.Notify(sigCh, syscall.SIGINT, syscall.SIGKILL)
  34. <-sigCh
  35. // 停止服务
  36. ps.gRPCAPIServer.Close()
  37. ps.httpAPIServer.Close()
  38. return nil
  39. }