Çok iyi düşünülmüş bir mimari olmuş. Anlık iletişim tarafında AJAX ile polling mi kullanıyorsunuz, yoksa WebSocket/SSE benzeri bir yapı mı tercih ettiniz?
Canlı sohbet uygulamalarında AJAX polling uygulaması geliştirmeyi kolaylaştırıyor ancak eş zamanlı kullanıcı sayısı arttığında WebSocket daha verimli olabiliyor. Merak ettim, gerçek zamanlı iletişim katmanını nasıl çözdünüz?
Açıkçası üzerinde en çok düşündüğümüz konu buydu.
Şu anda gerçek zamanlı katmanı WebSocket yerine, kendi sunucumuza yapılan adaptif (uyarlamalı) ve artımlı (cursor-based) HTTP polling ile çözüyoruz. Üç detay bu yaklaşımı verimli kılıyor bant genişliği ve sorgu limitini minimuma indirmeyi başarabildik.
Poll sıklığı duruma göre değişir aktif yazışmada ~0.8 sn, sohbet penceresi açıkken ~2 sn, boştayken ~10 sn. Her mesaj sonrası kısa bir "hızlı pencere" açılıp iletim anlık hissettiriliyor, sonra aralık tekrar genişliyor. Mesajların yanı sıra operatör çevrimiçi durumu, "yazıyor…" göstergesi, okundu bilgisi ve oturum durumu hepsi aynı poll yanıtında dönüyor; ekstra bağlantı ya da istek yok. Ek olarak hatta premium paket operatör üyeliklerinde müşterinin önceden yazdığı metni görebilme özelliği getirdik müşteri düşünerek yazıyor veya mesajı siliyor bunu önceden görerek hızlı yanıt vermeyi arttırıyor. ( kötü anlamda düşünmedik tamamen hızlı yanıt olması için özelliği düşündük ) Tüm veri bize ait sunucudan akıyor ve kalıcı bağlantı (persistent socket) altyapısı gerektirmeden her hosting ortamında — paylaşımlı / LiteSpeed dâhil sorunsuz çalışıyor. Kurulum ve dayanıklılık tarafında ciddi avantaj. Haklısınız, eş zamanlı kullanıcı sayısı çok arttığında WebSocket/SSE daha verimli olur. Mesaj akışını tek uç üzerinden yönettiğimiz için, ölçek gerektirdiğinde kalıcı bağlantıya geçiş bizim için maliyetli değil. Şu anki hedeflediğimiz yük profilinde ise adaptif polling fazlasıyla yeterli ve öngörülebilir davranıyor.