WebSockets ile Gerçek Zamanlı Uygulamalar Geliştirmek

Polling uygulamanız için kötüdür.

Bir keresinde AJAX polling kullanarak bir sohbet widget'ı geliştirmiştim. Uygulamayı, her saniye sunucudan yeni mesajları isteyecek şekilde ayarlamıştım. Çalışıyordu ama yavaştı. Kullanıcı arayüzü (UI) hantal hissettiriyordu. Sunucu çok fazla çalışıyordu. Çoğu istek boş veri döndürüyordu. Bir çay kaşığıyla küvet doldurmaya çalışmak gibiydi.

WebSockets bunu değiştirir.

Sürekli istekler göndermek yerine, tek bir kalıcı bağlantı açarsınız. Bu, iki yönlü bir veri akışına olanak tanır. Sunucu, veriyi istemciye anında iletebilir. İstemci, veriyi sunucuya anında gönderebilir.

Neden WebSockets kullanmalısınız?

• Gecikme (latency), yüzlerce milisaniyeden onlu milisaniyelere düşer. • Sunucu yükü öngörülebilir hale gelir. • Tekrarlanan HTTP başlıklarını kaldırarak bant genişliğinden tasarruf edersiniz. • Sohbet, canlı bildirimler ve çok oyunculu oyunlar için uygundur.

Nasıl çalışır:

Bağlantı, bir HTTP yükseltme (upgrade) isteği ile başlar. Sunucu kabul ederse, 101 durum kodunu gönderir. Bundan sonra, ham bir ikili (binary) veya metin protokolü kullanırsınız. Sizi yavaşlatan artık çerezler (cookies) veya başlıklar (headers) yoktur.

Kaçınılması gereken yaygın tuzaklar:

  • Bağlantı kopmaları: Ağlar hata verebilir. Üstel geri çekilme (exponential backoff) gibi bir yeniden deneme stratejisi uygulamalısınız.
  • Bellek sızıntıları: Kullanıcı ayrıldığında soketlerinizi her zaman kapatın. Zombie bağlantılar sunucu belleğini tüketir.
  • Mesaj döngüleri: Yayın yaparken (broadcasting), orijinal göndericiyi atlayın. Aksi takdirde, kullanıcı kendi mesajını iki kez görür.
  • Boşta kalan bağlantılar: Bazı proxy'ler sessiz bağlantıları kapatır. Soketi canlı tutmak için bir ping/pong kalp atışı (heartbeat) kullanın.

Sunucuya bir şeyin değişip değişmediğini sormayı bırakın. İstediğiniz zaman konuşabilmek için hattı açık tutmaya başlayın.

Göreviniz:

Temel bir sohbet örneği alın. Bir "yazıyor..." (typing...) göstergesi ekleyin. Bunu Render veya Fly.io gibi bir platformda yayınlayın. O göstergenin polling yapmadan gerçek zamanlı olarak hareket ettiğini gördüğünüzde, seviye atlamış olacaksınız.

Kaynak: https://dev.to/timevolt/the-matrix-of-real-time-building-websocket-apps-for-chat-notifications-and-live-updates-3ja1