From afb11b368331f897cc9e08f46d7b611378e9856c Mon Sep 17 00:00:00 2001 From: nafisfaysal Date: Wed, 26 Dec 2018 07:36:02 +0600 Subject: [PATCH] improve server with graceful shutdown --- main.go | 25 +++++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/main.go b/main.go index 82acc18..1548a6a 100644 --- a/main.go +++ b/main.go @@ -7,7 +7,9 @@ import ( "log" "net/http" "os" + "os/signal" "path/filepath" + "syscall" "time" "github.com/goproxyio/goproxy/pkg/proxy" @@ -24,6 +26,8 @@ func init() { } func main() { + errCh := make(chan error) + log.Printf("goproxy: %s inited. listen on %s\n", time.Now().Format("2006-01-02 15:04:05"), listen) if cacheDir == "" { @@ -43,9 +47,22 @@ func main() { } http.Handle("/", proxy.NewProxy(cacheDir)) - // TODO: TLS, graceful shutdown - err := http.ListenAndServe(listen, nil) - if nil != err { - panic(err) + + go func() { + err := http.ListenAndServe(listen, nil) + if err != nil { + errCh <- err + } + }() + + signCh := make(chan os.Signal) + signal.Notify(signCh, os.Interrupt, syscall.SIGTERM) + + select { + case err := <-errCh: + log.Fatal(err) + + case sign := <-signCh: + log.Printf("Server gracefully %s", sign) } }