|
@@ -8,21 +8,36 @@ import (
|
|
"os/signal"
|
|
"os/signal"
|
|
"syscall"
|
|
"syscall"
|
|
"time"
|
|
"time"
|
|
|
|
+
|
|
|
|
+ "golang.org/x/net/http2"
|
|
|
|
+)
|
|
|
|
+
|
|
|
|
+const (
|
|
|
|
+ megaByte = 1 << 20 // 1 mb , 2 mb 1 << 21, 4mb 1 << 22, 8mb 1 << 23
|
|
|
|
+ gigaByte = 1 << 30
|
|
|
|
+)
|
|
|
|
+
|
|
|
|
+var (
|
|
|
|
+ readTimeout = 30 * time.Second
|
|
|
|
+ writeTimeout = 30 * time.Second
|
|
)
|
|
)
|
|
|
|
|
|
func newServe(addr string, router http.Handler) *http.Server {
|
|
func newServe(addr string, router http.Handler) *http.Server {
|
|
return &http.Server{
|
|
return &http.Server{
|
|
Addr: addr,
|
|
Addr: addr,
|
|
Handler: router,
|
|
Handler: router,
|
|
- ReadTimeout: 30 * time.Second,
|
|
|
|
- WriteTimeout: 30 * time.Second,
|
|
|
|
- MaxHeaderBytes: 1 << 20,
|
|
|
|
|
|
+ ReadTimeout: readTimeout,
|
|
|
|
+ WriteTimeout: writeTimeout,
|
|
|
|
+ MaxHeaderBytes: megaByte,
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
-// ListenAndServe new server and start
|
|
|
|
-func ListenAndServe(addr string, router http.Handler) {
|
|
|
|
|
|
+func run(useV2 bool, addr, certFile, keyFile string, router http.Handler) {
|
|
s := newServe(addr, router)
|
|
s := newServe(addr, router)
|
|
|
|
+ if useV2 {
|
|
|
|
+ http2.VerboseLogs = false
|
|
|
|
+ http2.ConfigureServer(s, nil)
|
|
|
|
+ }
|
|
errc := make(chan error)
|
|
errc := make(chan error)
|
|
go func() {
|
|
go func() {
|
|
c := make(chan os.Signal)
|
|
c := make(chan os.Signal)
|
|
@@ -32,27 +47,33 @@ func ListenAndServe(addr string, router http.Handler) {
|
|
|
|
|
|
go func() {
|
|
go func() {
|
|
log.Println("HTTP Server listen on", addr)
|
|
log.Println("HTTP Server listen on", addr)
|
|
- errc <- s.ListenAndServe()
|
|
|
|
|
|
+ if len(certFile) > 0 && len(keyFile) > 0 {
|
|
|
|
+ errc <- s.ListenAndServeTLS(certFile, keyFile)
|
|
|
|
+ } else {
|
|
|
|
+ errc <- s.ListenAndServe()
|
|
|
|
+ }
|
|
|
|
+
|
|
log.Println("Exit HTTP server", "Quit")
|
|
log.Println("Exit HTTP server", "Quit")
|
|
}()
|
|
}()
|
|
log.Println("Exit", <-errc)
|
|
log.Println("Exit", <-errc)
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+// ListenAndServe new server and start
|
|
|
|
+func ListenAndServe(addr string, router http.Handler) {
|
|
|
|
+ run(false, addr, ``, ``, router)
|
|
|
|
+}
|
|
|
|
+
|
|
// ListenAndServeTLS new server and start
|
|
// ListenAndServeTLS new server and start
|
|
func ListenAndServeTLS(addr, certFile, keyFile string, router http.Handler) {
|
|
func ListenAndServeTLS(addr, certFile, keyFile string, router http.Handler) {
|
|
- s := newServe(addr, router)
|
|
|
|
|
|
+ run(false, addr, certFile, keyFile, router)
|
|
|
|
+}
|
|
|
|
|
|
- errc := make(chan error)
|
|
|
|
- go func() {
|
|
|
|
- c := make(chan os.Signal)
|
|
|
|
- signal.Notify(c, syscall.SIGINT, syscall.SIGTERM)
|
|
|
|
- errc <- fmt.Errorf("%s", <-c)
|
|
|
|
- }()
|
|
|
|
|
|
+// ListenAndServeV2 new http2 server and start
|
|
|
|
+func ListenAndServeV2(addr string, router http.Handler) {
|
|
|
|
+ run(true, addr, ``, ``, router)
|
|
|
|
+}
|
|
|
|
|
|
- go func() {
|
|
|
|
- log.Println("HTTP Server listen on", addr)
|
|
|
|
- errc <- s.ListenAndServeTLS(certFile, keyFile)
|
|
|
|
- log.Println("Exit HTTP server", "Quit")
|
|
|
|
- }()
|
|
|
|
- log.Println("Exit", <-errc)
|
|
|
|
|
|
+// ListenAndServeTLSV2 new http2 server and start
|
|
|
|
+func ListenAndServeTLSV2(addr, certFile, keyFile string, router http.Handler) {
|
|
|
|
+ run(true, addr, certFile, keyFile, router)
|
|
}
|
|
}
|