Study
Echo

Graceful Shutdown

Penjelasan

Mematikan server LANGSUNG (mis. Ctrl+C) bisa memutus request yang SEDANG DIPROSES di tengah jalan — graceful shutdown menangkap sinyal terminasi OS, memberi waktu server menyelesaikan request yang sedang berjalan (dengan batas waktu/timeout) sebelum benar-benar mati, dipakai lewat e.Shutdown(ctx).

Contoh Konsep

go func() {
	if err := e.Start(":8080"); err != nil && err != http.ErrServerClosed {
		e.Logger.Fatal("Server berhenti: ", err)
	}
}()

quit := make(chan os.Signal, 1)
signal.Notify(quit, os.Interrupt)
<-quit // tunggu sinyal Ctrl+C atau terminasi lain

ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
defer cancel()

if err := e.Shutdown(ctx); err != nil {
	e.Logger.Fatal(err)
}

Praktikum

Jelaskan (sebagai catatan) apa yang terjadi kalau server Echo dimatikan TANPA graceful shutdown saat sedang memproses 100 request bersamaan, dibandingkan kalau memakai graceful shutdown dengan timeout 10 detik.

Editor Latihan

Ketik/edit bebas di sini untuk latihan — kode ini tidak dijalankan.

Tips

e.Start() bersifat BLOCKING (tidak pernah return selama server jalan normal) — makanya WAJIB dijalankan di goroutine terpisah (go func() { ... }()) supaya kode setelahnya (menunggu sinyal shutdown) tetap bisa dieksekusi di goroutine utama.