Yeniden Bağlanma Stratejileri
Bağlantı koptuktan sonra güvenilir şekilde yeniden bağlanın.
Yeniden Bağlanma Stratejileri, CoddyKit'te ücretsiz bir JavaScript 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, JavaScript Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. JavaScript Academy kursu toplamda 4 dersten oluşur.
Neden Yeniden Bağlanmalı?
Ağlar güvenilir değildir; Wi-Fi bağlantısı kopabilir, dizüstü bilgisayarlar uykuya geçebilir ve sunucular yeniden başlatılabilir. Sağlam bir WebSocket istemcisi kapanmayı algılar ve kullanıcı deneyiminin kesintisiz kalması için bağlantıyı otomatik olarak yeniden kurar.
Basit Yeniden Bağlanma
En basit yaklaşım, kapatma sonrasında hemen yeniden açmaktır. Sunucu çalışmıyorsa bu yaklaşım, sıkı bir döngü içinde sunucuyu isteklerle aşırı yükleyebilir.
function connect() {
const socket = new WebSocket(url);
socket.onclose = () => connect(); // too aggressive!
}Sabit Gecikme
Sabit bir gecikme eklemek daha yumuşak bir yaklaşımdır; ancak yine de düzenli bir deneme akışı gönderir ve çok sayıda istemcinin aynı anda eşzamanlanmasına neden olabilir.
socket.onclose = () => {
setTimeout(connect, 3000);
};Üstel Geri Çekilme
Her başarısız attempt sonrasında bekleme süresini iki katına çıkarın: 1 sn, 2 sn, 4 sn, 8 sn… ve bunu bir üst sınırda durdurun. Böylece yeniden denemeler zamana yayılır ve zorlanan bir sunucunun yükü azalır.
let attempt = 0;
function reconnect() {
const delay = Math.min(1000 * 2 ** attempt, 30000);
attempt++;
setTimeout(connect, delay);
}Rastgele Sapma Ekleme
Binlerce istemcinin tam aynı anda yeniden bağlanmaması için gecikmeyi biraz rastgeleleştirin. Tam rastgele sapma, 0 ile hesaplanan cap arasında rastgele bir değer seçer.
function backoffWithJitter(attempt) {
const cap = Math.min(1000 * 2 ** attempt, 30000);
return Math.random() * cap;
}Başarı Sonrasında Sıfırlama
onopen tetiklendiğinde attempt sayacını sıfırlayın; böylece sonraki kopma, geri çekilme sürecini baştan başlatır.
socket.onopen = () => {
attempt = 0;
console.log("reconnected");
};Eksiksiz Yeniden Bağlanan İstemci
Parçaları birleştirin: bağlanın, açıldığında sıfırlayın ve kapandığında geri çekilme uygulayın.
let attempt = 0, socket;
function connect() {
socket = new WebSocket(url);
socket.onopen = () => { attempt = 0; };
socket.onclose = () => {
const delay = Math.min(1000 * 2 ** attempt++, 30000);
setTimeout(connect, delay + Math.random() * 1000);
};
}
connect();Çevrimiçi/Çevrimdışı Durumuna Uyum
Tarayıcının çevrimiçi/çevrimdışı olaylarını dinleyin. Çevrimdışıyken yeniden bağlanmayı duraklatın ve bağlantı geri geldiğinde hemen bir deneme başlatın.
window.addEventListener("online", () => {
attempt = 0;
connect();
});
window.addEventListener("offline", () => {
if (socket) socket.close();
});Deneme Sayısını Sınırlama
İsteğe bağlı olarak yeniden deneme sayısını cap ile sınırlayın ve sonsuza kadar yeniden denemek yerine kalıcı bir başarısızlığı kullanıcıya bildirin.
const MAX = 10;
socket.onclose = () => {
if (attempt >= MAX) { showOfflineBanner(); return; }
setTimeout(connect, backoffWithJitter(attempt++));
};Yeniden Bağlandıktan Sonra Durumu Yeniden Eşitleme
Yeni bir bağlantının sunucu tarafında bağlamı yoktur. Yeniden açıldığında kanallara tekrar abone olun ve bağlantı kesikken kaçırılmış olabilecek iletileri isteyin.
socket.onopen = () => {
attempt = 0;
socket.send(JSON.stringify({ type: "resubscribe", channels }));
socket.send(JSON.stringify({ type: "sync", since: lastSeenId }));
};Yinelenen Socket'lerden Kaçınma
Yeniden bağlanma mantığı iki kez çalışırsa birden çok socket açılmasını engelleyin. Geçerli socket'i izleyin ve eski işleyicileri yok sayın.
function connect() {
if (socket && socket.readyState <= WebSocket.OPEN) return;
socket = new WebSocket(url);
}Kısa Kontrol
Yeniden bağlanma tasarımını sınayın.
Özet: Yeniden Bağlanma
Basit yeniden bağlanmadan jitter içeren üstel geri çekilmeye geçtiniz, başarı sonrasında attempt değerlerini sıfırladınız, çevrimiçi/çevrimdışı olaylarına uyum sağladınız, yeniden denemeleri cap ile sınırladınız, yeniden bağlandıktan sonra durumu yeniden eşitlediniz ve yinelenen socket'lerden kaçındınız. İstemciniz artık dayanıklı.
Sıkça Sorulan Sorular
“Yeniden Bağlanma Stratejileri” dersi ücretsiz mi?
Evet — “Yeniden Bağlanma Stratejileri” 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 JavaScript Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. JavaScript Academy kursu toplamda 4 dersten oluşur.
“Yeniden Bağlanma Stratejileri” dersinde ne öğreneceğim?
Bağlantı koptuktan sonra güvenilir şekilde yeniden bağlanın. JavaScript 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.
JavaScript Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te JavaScript 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.
“Yeniden Bağlanma Stratejileri” 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 JavaScript Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her JavaScript 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.
Bu kursun tüm dersleri
- WebSocket Bağlantısı Açma
- Mesaj Gönderme ve Alma
- Bağlantı Yaşam Döngüsü ve Hatalar
- Yeniden Bağlanma Stratejileri