removed using http.Serve and add using *http.Server + Shutdown

This commit is contained in:
Денис Евстигнеев 2024-03-07 18:12:49 +03:00 committed by Евстигнеев Денис Сергеевич
parent 41f7bdf182
commit 1d5142d619
2 changed files with 56 additions and 16 deletions

24
.gitignore vendored Normal file
View File

@ -0,0 +1,24 @@
# Binaries for programs and plugins
*.exe
*.exe~
*.dll
*.so
*.dylib
bin
# Test binary, built with `go test -c`
*.test
# Output of the go coverage tool, specifically when used with LiteIDE
*.out
# Dependency directories (remove the comment below to include it)
# vendor/
# Go workspace file
go.work
# General
.DS_Store
.idea
.vscode

48
http.go
View File

@ -408,7 +408,7 @@ func (h *Server) Start() error {
h.Unlock() h.Unlock()
var handler http.Handler var handler http.Handler
var srvFunc func(net.Listener) error //var srvFunc func(net.Listener) error
// nolint: nestif // nolint: nestif
if h.opts.Context != nil { if h.opts.Context != nil {
@ -451,6 +451,7 @@ func (h *Server) Start() error {
fn := handler fn := handler
var hs *http.Server
if h.opts.Context != nil { if h.opts.Context != nil {
if mwf, ok := h.opts.Context.Value(middlewareKey{}).([]func(http.Handler) http.Handler); ok && len(mwf) > 0 { if mwf, ok := h.opts.Context.Value(middlewareKey{}).([]func(http.Handler) http.Handler); ok && len(mwf) > 0 {
// wrap the handler func // wrap the handler func
@ -458,25 +459,37 @@ func (h *Server) Start() error {
fn = mwf[i-1](fn) fn = mwf[i-1](fn)
} }
} }
if hs, ok := h.opts.Context.Value(serverKey{}).(*http.Server); ok && hs != nil { var ok bool
if hs, ok = h.opts.Context.Value(serverKey{}).(*http.Server); ok && hs != nil {
hs.Handler = fn hs.Handler = fn
srvFunc = hs.Serve //srvFunc = hs.Serve
} else {
hs = &http.Server{Handler: fn}
} }
} }
if srvFunc != nil { go func() {
go func() { if cerr := hs.Serve(ts); cerr != nil && !errors.Is(cerr, net.ErrClosed) {
if cerr := srvFunc(ts); cerr != nil && !errors.Is(cerr, net.ErrClosed) { h.opts.Logger.Error(h.opts.Context, cerr)
h.opts.Logger.Error(h.opts.Context, cerr) }
} }()
}()
} else { /*
go func() { if srvFunc != nil {
if cerr := http.Serve(ts, fn); cerr != nil && !errors.Is(cerr, net.ErrClosed) { go func() {
h.opts.Logger.Error(h.opts.Context, cerr) if cerr := srvFunc(ts); cerr != nil && !errors.Is(cerr, net.ErrClosed) {
} h.opts.Logger.Error(h.opts.Context, cerr)
}() }
} }()
} else {
go func() {
if cerr := http.Serve(ts, fn); cerr != nil && !errors.Is(cerr, net.ErrClosed) {
h.opts.Logger.Error(h.opts.Context, cerr)
}
}()
}
*/
go func() { go func() {
t := new(time.Ticker) t := new(time.Ticker)
@ -536,6 +549,9 @@ func (h *Server) Start() error {
config.Logger.Errorf(config.Context, "Server deregister error: %s", err) config.Logger.Errorf(config.Context, "Server deregister error: %s", err)
} }
// err ignore and empty cotnext
hs.Shutdown(context.Background())
ch <- ts.Close() ch <- ts.Close()
}() }()