starter.go 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. package internal
  2. import (
  3. "context"
  4. "crypto/tls"
  5. "fmt"
  6. "net/http"
  7. "github.com/tal-tech/go-zero/core/proc"
  8. )
  9. func StartHttp(host string, port int, handler http.Handler) error {
  10. addr := fmt.Sprintf("%s:%d", host, port)
  11. server := buildHttpServer(addr, handler)
  12. return StartServer(server)
  13. }
  14. func StartHttps(host string, port int, certFile, keyFile string, handler http.Handler) error {
  15. addr := fmt.Sprintf("%s:%d", host, port)
  16. if server, err := buildHttpsServer(addr, handler, certFile, keyFile); err != nil {
  17. return err
  18. } else {
  19. return StartServer(server)
  20. }
  21. }
  22. func StartServer(srv *http.Server) error {
  23. proc.AddWrapUpListener(func() {
  24. srv.Shutdown(context.Background())
  25. })
  26. return srv.ListenAndServe()
  27. }
  28. func buildHttpServer(addr string, handler http.Handler) *http.Server {
  29. return &http.Server{Addr: addr, Handler: handler}
  30. }
  31. func buildHttpsServer(addr string, handler http.Handler, certFile, keyFile string) (*http.Server, error) {
  32. cert, err := tls.LoadX509KeyPair(certFile, keyFile)
  33. if err != nil {
  34. return nil, err
  35. }
  36. config := tls.Config{Certificates: []tls.Certificate{cert}}
  37. return &http.Server{
  38. Addr: addr,
  39. Handler: handler,
  40. TLSConfig: &config,
  41. }, nil
  42. }