Düzgün Kapatma
OS sinyallerini işleme ve bağlantıları tüketme
Düzgün Kapatma, CoddyKit'te ücretsiz bir Go Academy dersidir. Bu, 4 dersinin 4. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Go Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Go Academy kursu toplamda 4 dersten oluşur.
Zarif kapanış neden gereklidir?
os.Exit çağrısı yapmak veya sunucuyu basitçe durdurmak, devam eden tüm istekleri düşürür. Zarif kapanış, çıkmadan önce etkin isteklerin tamamlanmasını bekler.
http.Server.Shutdown
srv.Shutdown(ctx) yeni bağlantıları kabul etmeyi durdurur, etkin isteklerin tamamlanmasını bekler ve ardından döner. Bekleme süresini sınırlamak için son tarih içeren bir bağlam geçirin.
ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
defer cancel()
srv.Shutdown(ctx)Sinyal işleme
Bir goroutine içinde SIGINT/SIGTERM sinyallerini dinleyin ve alındığında Shutdown çağrısı yapın:
quit := make(chan os.Signal, 1)
signal.Notify(quit, syscall.SIGINT, syscall.SIGTERM)
<-quit
log.Println("shutting down...")
srv.Shutdown(ctx)Tam zarif kapanış deseni
Sunucuyu bir goroutine içinde başlatın; sinyal kanalını bloke ederek bekleyin; ardından sunucuyu kapatın:
go func() {
if err := srv.ListenAndServe(); err != http.ErrServerClosed {
log.Fatal(err)
}
}()
quit := make(chan os.Signal, 1)
signal.Notify(quit, syscall.SIGINT, syscall.SIGTERM)
<-quit
srv.Shutdown(ctx)http.ErrServerClosed
Shutdown çağrıldıktan sonra ListenAndServe, http.ErrServerClosed döndürür. Bunu hata olarak değil, normal çıkış olarak ele alın.
Bağlantıları sonlandırma
Shutdown, ele geçirildiği ve etkin WebSocket bağlantılarının tümünü yalnızca işleyicinin kendisi bağlam iptaline uyuyorsa bekler. Uzun yoklama veya akışla işleme işleyicileri r.Context().Done() çağrısını denetlemelidir.
Kapanış zaman aşımı
Makul bir kapanış zaman aşımı (10-30 saniye) ayarlayın. Son tarih geçtikten sonra istekler hâlâ çalışıyorsa Shutdown, context.DeadlineExceeded döndürür ve kalan bağlantılar zorla kapatılır.
Kapanış sırasında temizleme
Shutdown döndükten sonra veritabanı havuzlarını kapatın, günlük arabelleklerini boşaltın ve diğer kaynakları sırayla serbest bırakın. defer veya açık sıralama kullanın.
srv.Shutdown(ctx)
db.Close()
logger.Sync()Server.Close ve Server.Shutdown karşılaştırması
srv.Close(), beklemeden tüm bağlantıları hemen kapatır. Bunu yalnızca zorla durdurmanın kabul edilebilir olduğu durumlarda (ör. sınamalarda) kullanın.
Kubernetes hazır olma yoklaması
Kapanış sırasında Shutdown çağrısından önce hazır olma yoklamasını 503 döndürecek şekilde güncelleyin. Bu, yük dengeleyiciye pod'a yeni istekler yönlendirmeyi durdurması gerektiğini bildirir.
Birden çok sunucu
Birden çok sunucu (HTTP + gRPC + ölçümler) çalıştırıyorsanız, her birini goroutine'lerle eşzamanlı olarak kapatın ve hepsinin bağlantıları sonlandırmasını beklemek için bir WaitGroup kullanın.
Kısa Kontrol
http.Server.Shutdown ne yapar?
Özet: Zarif kapanış
Temel noktalar:
- srv.Shutdown(ctx) yeni bağlantıları durdurur ve etkin bağlantıları bekler
- signal.Notify ile SIGINT/SIGTERM sinyallerini dinleyin
- ListenAndServe kapanışta http.ErrServerClosed döndürür — bu bir hata değildir
- Sonsuza kadar beklememek için bir kapanış son tarihi ayarlayın
Sıkça Sorulan Sorular
“Düzgün Kapatma” dersi ücretsiz mi?
Evet — “Düzgün Kapatma” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Go Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Go Academy kursu toplamda 4 dersten oluşur.
“Düzgün Kapatma” dersinde ne öğreneceğim?
OS sinyallerini işleme ve bağlantıları tüketme Go Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Go Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Go Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 4. dersidir.
“Düzgün Kapatma” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Go Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Go Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.