Add optional http server config params #11
@@ -8,12 +8,26 @@ import (
|
|||||||
"os/signal"
|
"os/signal"
|
||||||
"syscall"
|
"syscall"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
Type "github.com/lbatuska/goutils/type"
|
||||||
)
|
)
|
||||||
|
|
||||||
func (rg *RouteGroup) StartServer(addr string) *http.Server {
|
func (rg *RouteGroup) StartServer(addr string, config Type.Optional[ServerConfig]) *http.Server {
|
||||||
server := &http.Server{
|
var server *http.Server
|
||||||
Addr: addr,
|
if config.HasValue() {
|
||||||
Handler: rg,
|
serverConfig := config.Unwrap()
|
||||||
|
server = &http.Server{
|
||||||
|
Addr: addr,
|
||||||
|
Handler: rg,
|
||||||
|
ReadTimeout: serverConfig.ReadTimeout,
|
||||||
|
ReadHeaderTimeout: serverConfig.ReadHeaderTimeout,
|
||||||
|
WriteTimeout: serverConfig.WriteTimeout,
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
server = &http.Server{
|
||||||
|
Addr: addr,
|
||||||
|
Handler: rg,
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
go func() {
|
go func() {
|
||||||
@@ -25,10 +39,22 @@ func (rg *RouteGroup) StartServer(addr string) *http.Server {
|
|||||||
return server
|
return server
|
||||||
}
|
}
|
||||||
|
|
||||||
func (rg *RouteGroup) StartWithGracefulShutdown(addr string) {
|
func (rg *RouteGroup) StartWithGracefulShutdown(addr string, config Type.Optional[ServerConfig]) {
|
||||||
server := &http.Server{
|
var server *http.Server
|
||||||
Addr: addr,
|
if config.HasValue() {
|
||||||
Handler: rg, // This will use your RouteGroup (with ServeMux) as the handler
|
serverConfig := config.Unwrap()
|
||||||
|
server = &http.Server{
|
||||||
|
Addr: addr,
|
||||||
|
Handler: rg,
|
||||||
|
ReadTimeout: serverConfig.ReadTimeout,
|
||||||
|
ReadHeaderTimeout: serverConfig.ReadHeaderTimeout,
|
||||||
|
WriteTimeout: serverConfig.WriteTimeout,
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
server = &http.Server{
|
||||||
|
Addr: addr,
|
||||||
|
Handler: rg,
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Start the server in a separate goroutine
|
// Start the server in a separate goroutine
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ import (
|
|||||||
"time"
|
"time"
|
||||||
|
|
||||||
Testing "github.com/lbatuska/goutils/testing"
|
Testing "github.com/lbatuska/goutils/testing"
|
||||||
|
Type "github.com/lbatuska/goutils/type"
|
||||||
)
|
)
|
||||||
|
|
||||||
func setupServer(wg *sync.WaitGroup) {
|
func setupServer(wg *sync.WaitGroup) {
|
||||||
@@ -23,7 +24,7 @@ func setupServer(wg *sync.WaitGroup) {
|
|||||||
w.WriteHeader(200)
|
w.WriteHeader(200)
|
||||||
}))
|
}))
|
||||||
|
|
||||||
simpleRouter.StartWithGracefulShutdown("0.0.0.0:8080")
|
simpleRouter.StartWithGracefulShutdown("0.0.0.0:8080", Type.None[ServerConfig]())
|
||||||
}
|
}
|
||||||
|
|
||||||
func sendKillSignal(wg *sync.WaitGroup) {
|
func sendKillSignal(wg *sync.WaitGroup) {
|
||||||
|
|||||||
@@ -1,6 +1,9 @@
|
|||||||
package SimpleRouter
|
package SimpleRouter
|
||||||
|
|
||||||
import "net/http"
|
import (
|
||||||
|
"net/http"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
type Middleware func(http.Handler) http.Handler
|
type Middleware func(http.Handler) http.Handler
|
||||||
|
|
||||||
@@ -10,3 +13,9 @@ type RouteGroup struct {
|
|||||||
middlewares []Middleware // Stack of middlewares that will be applied on a handler in order
|
middlewares []Middleware // Stack of middlewares that will be applied on a handler in order
|
||||||
global_middlewares *[]Middleware
|
global_middlewares *[]Middleware
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type ServerConfig struct {
|
||||||
|
ReadTimeout time.Duration
|
||||||
|
ReadHeaderTimeout time.Duration
|
||||||
|
WriteTimeout time.Duration
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user