Use net.http by default

This commit is contained in:
DataHoarder 2022-06-06 22:26:50 +02:00
parent bc9af1d613
commit 7c38374d99
Signed by: DataHoarder
SSH key fingerprint: SHA256:OLTRf6Fl87G52SiR7sWLGNzlJt4WOX+tfI2yxo0z7xk
3 changed files with 81 additions and 41 deletions

4
go.mod
View file

@ -20,8 +20,8 @@ require (
github.com/klauspost/cpuid/v2 v2.0.12 // indirect github.com/klauspost/cpuid/v2 v2.0.12 // indirect
github.com/marten-seemann/qpack v0.2.1 // indirect github.com/marten-seemann/qpack v0.2.1 // indirect
github.com/marten-seemann/qtls-go1-16 v0.1.5 // indirect github.com/marten-seemann/qtls-go1-16 v0.1.5 // indirect
github.com/marten-seemann/qtls-go1-17 v0.1.1 // indirect github.com/marten-seemann/qtls-go1-17 v0.1.2 // indirect
github.com/marten-seemann/qtls-go1-18 v0.1.1 // indirect github.com/marten-seemann/qtls-go1-18 v0.1.2 // indirect
github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1 // indirect github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1 // indirect
github.com/minio/sha256-simd v1.0.0 // indirect github.com/minio/sha256-simd v1.0.0 // indirect
github.com/mr-tron/base58 v1.2.0 // indirect github.com/mr-tron/base58 v1.2.0 // indirect

6
go.sum
View file

@ -99,10 +99,12 @@ github.com/marten-seemann/qpack v0.2.1 h1:jvTsT/HpCn2UZJdP+UUB53FfUUgeOyG5K1ns0O
github.com/marten-seemann/qpack v0.2.1/go.mod h1:F7Gl5L1jIgN1D11ucXefiuJS9UMVP2opoCp2jDKb7wc= github.com/marten-seemann/qpack v0.2.1/go.mod h1:F7Gl5L1jIgN1D11ucXefiuJS9UMVP2opoCp2jDKb7wc=
github.com/marten-seemann/qtls-go1-16 v0.1.5 h1:o9JrYPPco/Nukd/HpOHMHZoBDXQqoNtUCmny98/1uqQ= github.com/marten-seemann/qtls-go1-16 v0.1.5 h1:o9JrYPPco/Nukd/HpOHMHZoBDXQqoNtUCmny98/1uqQ=
github.com/marten-seemann/qtls-go1-16 v0.1.5/go.mod h1:gNpI2Ol+lRS3WwSOtIUUtRwZEQMXjYK+dQSBFbethAk= github.com/marten-seemann/qtls-go1-16 v0.1.5/go.mod h1:gNpI2Ol+lRS3WwSOtIUUtRwZEQMXjYK+dQSBFbethAk=
github.com/marten-seemann/qtls-go1-17 v0.1.1 h1:DQjHPq+aOzUeh9/lixAGunn6rIOQyWChPSI4+hgW7jc=
github.com/marten-seemann/qtls-go1-17 v0.1.1/go.mod h1:C2ekUKcDdz9SDWxec1N/MvcXBpaX9l3Nx67XaR84L5s= github.com/marten-seemann/qtls-go1-17 v0.1.1/go.mod h1:C2ekUKcDdz9SDWxec1N/MvcXBpaX9l3Nx67XaR84L5s=
github.com/marten-seemann/qtls-go1-18 v0.1.1 h1:qp7p7XXUFL7fpBvSS1sWD+uSqPvzNQK43DH+/qEkj0Y= github.com/marten-seemann/qtls-go1-17 v0.1.2 h1:JADBlm0LYiVbuSySCHeY863dNkcpMmDR7s0bLKJeYlQ=
github.com/marten-seemann/qtls-go1-17 v0.1.2/go.mod h1:C2ekUKcDdz9SDWxec1N/MvcXBpaX9l3Nx67XaR84L5s=
github.com/marten-seemann/qtls-go1-18 v0.1.1/go.mod h1:mJttiymBAByA49mhlNZZGrH5u1uXYZJ+RW28Py7f4m4= github.com/marten-seemann/qtls-go1-18 v0.1.1/go.mod h1:mJttiymBAByA49mhlNZZGrH5u1uXYZJ+RW28Py7f4m4=
github.com/marten-seemann/qtls-go1-18 v0.1.2 h1:JH6jmzbduz0ITVQ7ShevK10Av5+jBEKAHMntXmIV7kM=
github.com/marten-seemann/qtls-go1-18 v0.1.2/go.mod h1:mJttiymBAByA49mhlNZZGrH5u1uXYZJ+RW28Py7f4m4=
github.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= github.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc=
github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU=
github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94=

View file

@ -18,6 +18,7 @@ import (
type Server struct { type Server struct {
ListenAddress string ListenAddress string
TLSConfig *tlsutils.Configuration TLSConfig *tlsutils.Configuration
UseFastHTTP bool
EnableHTTP2 bool EnableHTTP2 bool
FastHTTPRequestServer FastHTTPRequestServer FastHTTPRequestServer FastHTTPRequestServer
NetHTTPRequestServer NetHTTPRequestServer NetHTTPRequestServer NetHTTPRequestServer
@ -77,48 +78,85 @@ func (server *Server) Serve() {
server.AddExtraHeader("Connection", "close") server.AddExtraHeader("Connection", "close")
} }
wg.Add(1) if server.UseFastHTTP {
go func() { wg.Add(1)
defer wg.Done() go func() {
defer wg.Done()
handler := func(ctx *fasthttp.RequestCtx) RequestContext { handler := func(ctx *fasthttp.RequestCtx) RequestContext {
return NewRequestContextFromFastHttp(server, ctx) return NewRequestContextFromFastHttp(server, ctx)
} }
if server.FastHTTPRequestServer != nil { if server.FastHTTPRequestServer != nil {
handler = server.FastHTTPRequestServer handler = server.FastHTTPRequestServer
} }
s := &fasthttp.Server{ s := &fasthttp.Server{
ReadTimeout: 5 * time.Second, ReadTimeout: 5 * time.Second,
IdleTimeout: 15 * time.Second, IdleTimeout: 15 * time.Second,
Handler: func(ctx *fasthttp.RequestCtx) { Handler: func(ctx *fasthttp.RequestCtx) {
server.Handler(handler(ctx)) server.Handler(handler(ctx))
}, },
NoDefaultServerHeader: true, NoDefaultServerHeader: true,
NoDefaultDate: true, NoDefaultDate: true,
DisableKeepalive: !server.EnableHTTP2, DisableKeepalive: !server.EnableHTTP2,
TCPKeepalive: server.EnableHTTP2, TCPKeepalive: server.EnableHTTP2,
TLSConfig: server.TLSConfig.Config, TLSConfig: server.TLSConfig.Config,
} }
if server.EnableHTTP2 { if server.EnableHTTP2 {
http2.ConfigureServer(s, http2.ServerConfig{ http2.ConfigureServer(s, http2.ServerConfig{
Debug: server.Debug, Debug: server.Debug,
}) })
} }
log.Printf("[Server] Serving TCP on %s", server.ListenAddress) log.Printf("[Server] Serving TCP on %s", server.ListenAddress)
ln, err := net.Listen("tcp", server.ListenAddress) ln, err := net.Listen("tcp", server.ListenAddress)
if err != nil { if err != nil {
log.Panic(err) log.Panic(err)
} }
defer ln.Close() defer ln.Close()
err = s.Serve(tls.NewListener(ln, s.TLSConfig.Clone())) err = s.Serve(tls.NewListener(ln, s.TLSConfig.Clone()))
if err != nil { if err != nil {
log.Panic(err) log.Panic(err)
} }
}() }()
} else {
wg.Add(1)
go func() {
defer wg.Done()
handler := func(w http.ResponseWriter, r *http.Request) RequestContext {
return NewRequestContextFromHttp(server, w, r)
}
if server.NetHTTPRequestServer != nil {
handler = server.NetHTTPRequestServer
}
s := &http.Server{
ReadTimeout: 5 * time.Second,
IdleTimeout: 15 * time.Second,
Addr: server.ListenAddress,
TLSConfig: server.TLSConfig.QUICConfig,
Handler: http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
server.Handler(handler(w, r))
}),
}
s.SetKeepAlivesEnabled(!server.EnableHTTP2)
log.Printf("[Server] Serving TCP on %s", server.ListenAddress)
ln, err := net.Listen("tcp", server.ListenAddress)
if err != nil {
log.Panic(err)
}
defer ln.Close()
err = s.Serve(tls.NewListener(ln, s.TLSConfig.Clone()))
if err != nil {
log.Panic(err)
}
}()
}
if server.EnableHTTP3 { if server.EnableHTTP3 {
wg.Add(1) wg.Add(1)