Senior
Goда HTTP серверин кандайча долбоорлоо керек, жумушту токтотуу жана туура ресурстарды тазалоо үчүн?
sobes.tech AI
AIден жооп
Go тилиндеги HTTP серверин ийкемдүү токтотууну колдоо үчүн, жокко чыгаруу менен контекстти жана net/http пакетинен Shutdown ыкмасын колдонуу керек. Бул учурда, учурдагы суроолорду туура аяктап, ресурстарды бошотуп, серверди токтотуу алдында.
Мисал:
srv := &http.Server{Addr: ":8080", Handler: myHandler}
// Серверди өзүнчө горутинде иштетүү
go func() {
if err := srv.ListenAndServe(); err != nil && err != http.ErrServerClosed {
log.Fatalf("ListenAndServe(): %v", err)
}
}()
// токтотуу белгилерин күтүү
quit := make(chan os.Signal, 1)
signal.Notify(quit, os.Interrupt, syscall.SIGTERM)
<-quit
// токтотуу үчүн убакыт чектелген контекст түзүү
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
defer cancel()
// `Shutdown` ыкмасын чакырып, ийкемдүү токтотуу
if err := srv.Shutdown(ctx); err != nil {
log.Fatalf("Server Shutdown Failed:%+v", err)
}
log.Println("Сервер туура жабылды")
Бул ыкма сервер активдүү байланыштарды үзбөйт, аларды туура аяктап, ресурстарды бошотуп, ишин токтотот.