Sobes.tech
Senior

Go'da HTTP serveri qanday qilib muloyim yopilish va to'g'ri resurslarni tozalashni ta'minlash uchun qanday loyihalashtirilishi kerak?

sobes.tech AI

AIdan javob

Go tilida HTTP-serverni ehtiyotkorlik bilan to'xtatishni qo'llab-quvvatlash uchun, bekor qilish bilan kontekst va net/http paketidan Shutdown metodidan foydalanish kerak. Bu, joriy so'rovlarni to'g'ri yakunlash va resurslarni bo'shatish imkonini beradi, serverni to'xtatishdan oldin.

Misol:

srv := &http.Server{Addr: ":8080", Handler: myHandler}

// Serverni alohida gorutinda ishga tushirish
go func() {
    if err := srv.ListenAndServe(); err != nil && err != http.ErrServerClosed {
        log.Fatalf("ListenAndServe(): %v", err)
    }
}()

// To'xtash signalini kutish
quit := make(chan os.Signal, 1)
signal.Notify(quit, os.Interrupt, syscall.SIGTERM)
<-quit

// To'xtash uchun timeout bilan kontekst yaratish
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
defer cancel()

// To'xtash uchun Shutdown chaqirish
if err := srv.Shutdown(ctx); err != nil {
    log.Fatalf("Server Shutdown Failed:%+v", err)
}

log.Println("Server to'g'ri yopildi")

Bu yondashuv, server faol ulanishlarni uzmasligini ta'minlaydi, ularni to'g'ri yakunlaydi, resurslarni bo'shatadi va ishni yakunlaydi.