12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- package myth
- import (
- "context"
- "fmt"
- "log"
- "net/http"
- "os"
- "os/signal"
- "syscall"
- "time"
- //"golang.org/x/net/http2"
- )
- var (
- readTimeout = 30 * time.Second
- readHeaderTimeout = 30 * time.Second
- writeTimeout = 30 * time.Second
- idleTimeout = 30 * time.Second
- shutTimeout = 30 * time.Second
- )
- func newServe(addr string, router http.Handler) *http.Server {
- return &http.Server{
- Addr: addr,
- Handler: router,
- ReadTimeout: readTimeout,
- ReadHeaderTimeout: readHeaderTimeout,
- WriteTimeout: writeTimeout,
- IdleTimeout: idleTimeout,
- MaxHeaderBytes: MB,
- }
- }
- func run(useV2 bool, addr, certFile, keyFile string, router http.Handler) {
- s := newServe(addr, router)
- /*
- if useV2 {
- http2.VerboseLogs = false
- http2.ConfigureServer(s, nil)
- }
- // */
- errc := make(chan error)
- go func() {
- c := make(chan os.Signal)
- signal.Notify(c, syscall.SIGINT, syscall.SIGQUIT, syscall.SIGTERM)
- errc <- fmt.Errorf("%s", <-c)
- }()
- go func() {
- log.Println("HTTP Server listen on", addr)
- if len(certFile) > 0 && len(keyFile) > 0 {
- errc <- s.ListenAndServeTLS(certFile, keyFile)
- } else {
- errc <- s.ListenAndServe()
- }
- //log.Println("Exit HTTP server", "Quit")
- }()
- e := <-errc
- log.Println("Recvie", e)
- ctx, cancel := context.WithTimeout(context.Background(), shutTimeout)
- defer cancel()
- s.Shutdown(ctx)
- log.Println("Exit HTTP server")
- }
- // ListenAndServe new server and start
- func ListenAndServe(addr string, router http.Handler) {
- run(false, addr, ``, ``, router)
- }
- // ListenAndServeTLS new server and start
- func ListenAndServeTLS(addr, certFile, keyFile string, router http.Handler) {
- run(false, addr, certFile, keyFile, router)
- }
- // ListenAndServeV2 new http2 server and start
- func ListenAndServeV2(addr string, router http.Handler) {
- run(true, addr, ``, ``, router)
- }
- // ListenAndServeTLSV2 new http2 server and start
- func ListenAndServeTLSV2(addr, certFile, keyFile string, router http.Handler) {
- run(true, addr, certFile, keyFile, router)
- }
|