ginebra reiniciar o detener con gracia
Para reiniciar o detener correctamente su servidor web, utilice el siguiente método
Podemos usar fvbock / infinito para reemplazar el predeterminado ListenAndServe
, vea el número 296 para más detalles
router := gin.Default()
router.GET("/", handler)
// [...]
endless.ListenAndServe(":4242", router)
Una alternativa
- modales : un servidor HTTP de Go que se puede cerrar sin problemas
- graceful : Graceful es un paquete go que admite el cierre ordenado del servidor http.Handler
- gracia : reinicio elegante e implementación sin tiempo de inactividad del servidor Go
Si su versión de Go es 1.8, es posible que no necesite usar esta biblioteca, considere usar el método Shutdown () incorporado de http.Server para un apagado ordenado , vea el ejemplo
// +build go1.8
package main
import (
"context"
"log"
"net/http"
"os"
"os/signal"
"time"
"github.com/gin-gonic/gin"
)
func main() {
router := gin.Default()
router.GET("/", func(c *gin.Context) {
time.Sleep(5 * time.Second)
c.String(http.StatusOK, "Welcome Gin Server")
})
srv := &http.Server{
Addr: ":8080",
Handler: router,
}
go func() {
// service connections
if err := srv.ListenAndServe(); err != nil && err != http.ErrServerClosed {
log.Fatalf("listen: %s\n", err)
}
}()
// Wait for interrupt signal to gracefully shutdown the server with
// a timeout of 5 seconds.
quit := make(chan os.Signal)
signal.Notify(quit, os.Interrupt)
<-quit
log.Println("Shutdown Server ...")
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
defer cancel()
if err := srv.Shutdown(ctx); err != nil {
log.Fatal("Server Shutdown:", err)
}
log.Println("Server exiting")
}