Sobes.tech
Senior

Ինչպե՞ս պետք է նախագծել HTTP սերվերը Go-ում՝ հոսող անսպասելի անջատում և ճիշտ ռեսուրսների մաքրման համար։

sobes.tech AI

Պատասխան AI-ից

Go-յի HTTP սերվերի համար հուշում ապահովելու համար անհրաժեշտ է օգտագործել չեղարկման կոնտեքստ և net/http փաթեթից Shutdown մեթոդը: Սա թույլ է տալիս ճիշտ ավարտել ընթացիկ հարցումները և ազատել ռեսուրսները սերվերի կանգնեցումից առաջ:

Օրինակ՝

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

// Սերվերը գործարկել առանձին goroutine-ով
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("Սերվերը ճիշտ դուրս եկավ")

Այս մոտեցումը ապահովում է, որ սերվերը չի կտրի ակտիվ կապերը, այլ ճիշտ ավարտի դրանք, ազատի ռեսուրսները և կասեցնի աշխատանքը։