4 puan yazan GN⁺ 2024-03-19 | 1 yorum | WhatsApp'ta paylaş

WebSocket vs Server-Sent Events vs Long Polling vs WebRTC vs WebTransport

  • Modern gerçek zamanlı web uygulamalarında sunucudan istemciye olay iletme yeteneği vazgeçilmezdir.
  • Bu ihtiyaç nedeniyle çeşitli yöntemler geliştirilmiştir ve her birinin kendine özgü avantajları ve dezavantajları vardır.
  • Başlangıçta kullanılabilen tek seçenek long polling idi, ancak daha sonra çift yönlü iletişim için daha sağlam bir çözüm olan WebSocket ortaya çıktı.
  • WebSocket'ten sonra, sunucudan istemciye tek yönlü iletişim için daha basit bir yöntem olan Server-Sent Events (SSE) sunuldu.
  • WebTransport protokolü daha verimli, esnek ve ölçeklenebilir bir yaklaşım sunar ve bu alanı daha da dönüştürecek gibi görünmektedir.
  • Belirli kullanım senaryoları için WebRTC de sunucu-istemci olayları açısından değerlendirilebilir.

Long polling nedir?

  • Long polling, HTTP üzerinden tarayıcıda kullanılabilen sunucu-istemci mesajlaşmasını mümkün kılan ilk "hack" tekniğidir.
  • İstemcinin düzenli aralıklarla sunucudan veri istediği geleneksel polling'den farklı olarak long polling, yeni veri kullanılabilir olana kadar açık kalan bir sunucu bağlantısı kurar.
  • Sunucuda yeni bilgi olduğunda istemciye yanıt gönderilir ve bağlantı kapatılır.
  • İstemci, sunucunun yanıtını alır almaz yeni bir istek başlatır ve bu süreç tekrar eder.
  • Bu yöntem daha anlık veri güncellemeleri sağlar ve gereksiz ağ trafiğini ve sunucu yükünü azaltır.
  • Ancak yine de iletişim gecikmesine yol açabilir ve WebSocket gibi diğer gerçek zamanlı teknolojilere göre daha az verimlidir.

WebSocket nedir?

  • WebSocket, istemci ile sunucu arasında tek ve kalıcı bir bağlantı üzerinden tam çift yönlü iletişim kanalı sağlar.
  • Bu teknoloji, HTTP istek-yanıt döngüsünün ek yükü olmadan tarayıcı ile sunucu arasında veri alışverişini mümkün kılar; bu nedenle gerçek zamanlı veri aktarımı için uygundur.
  • WebSocket, geleneksel HTTP'ye göre büyük bir ilerlemeyi temsil eder; bağlantı kurulduktan sonra her iki taraf da bağımsız olarak veri gönderebilir, bu da onu düşük gecikme ve yüksek frekansta güncelleme gerektiren senaryolar için ideal hale getirir.

Server-Sent Events nedir?

  • Server-Sent Events (SSE), sunucu güncellemelerini HTTP üzerinden istemciye itmek için standart bir yöntem sunar.
  • WebSocket'ten farklı olarak SSE yalnızca sunucudan istemciye tek yönlü iletişim için tasarlanmıştır; bu da istemcinin sunucuya veri göndermesine gerek olmadan gerçek zamanlı güncellemeler alması gereken durumlar için idealdir.

WebTransport API nedir?

  • WebTransport, web istemcileri ile sunucular arasında verimli ve düşük gecikmeli iletişim için tasarlanmış modern bir API'dir.
  • HTTP/3 QUIC protokolünden yararlanarak çeşitli veri iletim özelliklerini mümkün kılar.
  • WebTransport; gerçek zamanlı oyunlar, canlı yayın ve iş birliği platformları gibi yüksek performanslı ağ iletişimi gerektiren uygulamalar için güçlü bir araçtır.
  • WebTransport şu anda working draft aşamasındadır ve henüz yaygın biçimde benimsenmemiştir.

WebRTC nedir?

  • WebRTC (Web Real-Time Communication), karmaşık sunucu altyapısı ya da ek eklenti kurulumu olmadan web tarayıcıları ve mobil uygulamalar içinde gerçek zamanlı iletişim (RTC) özelliklerini mümkün kılan açık kaynaklı bir proje ve API standardıdır.
  • WebRTC, tarayıcılar arasında ses, video ve veri alışverişi için peer-to-peer bağlantıları destekler.
  • WebRTC; NAT ve güvenlik duvarları üzerinden çalışacak şekilde tasarlanmıştır ve eşler arasında bağlantı kurmak için ICE, STUN ve TURN gibi protokolleri kullanır.

Teknolojilerin sınırlamaları

  • Veriyi çift yönlü gönderme yeteneği yalnızca WebSocket ve WebTransport'ta vardır.
  • Alan adı başına 6 istek sınırı nedeniyle tüm kalıcı sunucu-istemci mesajlaşma yöntemlerinin kullanılabilirliği sınırlanır.
  • Mobil uygulamalarda işletim sistemi, belirli bir süre etkinlik olmazsa uygulamayı otomatik olarak arka plana alır ve açık bağlantıları kapatır.
  • Kurumsal ortamlarda birçok proxy ve güvenlik duvarı HTTP dışı bağlantıları engellediğinden WebSocket sunucularını altyapıya entegre etmek zor olabilir.

Performans karşılaştırması

  • WebSocket, SSE, long polling ve WebTransport'un performansını doğrudan karşılaştırmak için gecikme, throughput, sunucu yükü ve çeşitli koşullarda ölçeklenebilirlik gibi temel yönleri değerlendirmek gerekir.

Gecikme

  • WebSocket: Tek kalıcı bağlantı üzerinden tam çift yönlü iletişim sayesinde en düşük gecikmeyi sağlar.
  • Server-Sent Events: Sunucudan istemciye iletişim için düşük gecikme sunar, ancak ek HTTP isteği olmadan sunucuya mesaj gönderemez.
  • Long polling: Her veri aktarımı için yeni bir HTTP bağlantısı kurmaya dayandığından daha yüksek gecikmeye neden olur.
  • WebTransport: WebSocket'e benzer düşük gecikme sunması beklenir ve HTTP/3 protokolünü kullanarak daha verimli çoklama ve tıkanıklık kontrolü avantajlarına sahiptir.

Throughput

  • WebSocket: Kalıcı bağlantı sayesinde yüksek throughput elde edebilir, ancak istemci sunucunun gönderebildiği hızda veriyi işleyemediğinde throughput düşebilir.
  • Server-Sent Events: WebSocket'e göre daha az ek yükle çok sayıda istemciye mesaj yayını yapabildiği için tek yönlü sunucu-istemci iletişiminde daha yüksek throughput sağlayabilir.
  • Long polling: Bağlantıları sık sık açıp kapatmanın getirdiği ek yük nedeniyle genellikle daha düşük throughput sunar.
  • WebTransport: Tek bir bağlantı içinde hem çift yönlü hem de tek yönlü akışlar için yüksek throughput desteklemesi beklenir ve çoklu akış gerektiren senaryolarda WebSocket'i aşabilir.

Ölçeklenebilirlik ve sunucu yükü

  • WebSocket: Çok sayıda WebSocket bağlantısını sürdürmek sunucu yükünü ciddi ölçüde artırabilir ve çok kullanıcılı uygulamalarda ölçeklenebilirliği etkileyebilir.
  • Server-Sent Events: WebSocket'e kıyasla daha az bağlantı ek yüküne sahip olduğundan, ağırlıklı olarak sunucudan istemciye güncelleme gereken senaryolarda daha ölçeklenebilirdir.
  • Long polling: Sık bağlantı kurulumu nedeniyle oluşan yüksek sunucu yükü yüzünden ölçeklenebilirliği en düşüktür.
  • WebTransport: HTTP/3'ün bağlantı ve akış işleme verimliliğinden yararlanacak şekilde tasarlandığı için WebSocket ve SSE'ye kıyasla sunucu yükünü azaltırken yüksek ölçeklenebilirlik sunar.

Öneriler ve kullanım senaryosuna uygunluk

  • Sunucu-istemci iletişim teknolojileri dünyasında her birinin kendine özgü güçlü yanları ve uygun kullanım alanları vardır.
  • Server-Sent Events (SSE), uygulanması en basit seçenektir ve kurumsal güvenlik duvarı kısıtlamalarını aşarak teknik sorunlardan kaçınabilir.
  • WebSocket, kalıcı çift yönlü iletişimin gerekli olduğu senaryolarda öne çıkar.
  • WebTransport'un benimsenmesi zordur; Node.js dahil sunucu çatıları tarafından yaygın biçimde desteklenmez ve Safari ile uyumlu değildir.
  • Long polling, verimsiz olduğu ve sürekli yeni HTTP bağlantıları kurmanın yüksek ek yükünü getirdiği için çoğu kullanım senaryosunda önerilmez.

Bilinen sorunlar

  • Tüm gerçek zamanlı akış teknolojilerinin bilinen sorunları vardır.
  • İstemci bağlantı sırasında, yeniden bağlanırken veya çevrimdışıyken sunucuda oluşan olayları kaçırabilir.
  • Kurumsal güvenlik duvarları, akış teknolojilerinin kullanımında sorunlara yol açabilir.

GN⁺ görüşü

  • Bu yazı, gerçek zamanlı web uygulamaları geliştirirken kullanılabilecek farklı iletişim teknolojilerini karşılaştırarak teknoloji seçimi konusunda faydalı bilgiler sunuyor.
  • WebSocket ve SSE zaten yaygın olarak kullanılıyor; özellikle WebSocket, gerçek zamanlı sohbet veya oyun gibi çift yönlü iletişim gerektiren uygulamalarda oldukça popüler.
  • WebTransport hâlâ taslak aşamasında ve yaygın biçimde desteklenmiyor; bu nedenle gerçek projelerde kullanımı pratik olmayabilir. Yine de gelecekte HTTP/3 tabanlı bir teknoloji olarak ciddi potansiyel taşıdığı için dikkat çekicidir.
  • Long polling eski bir teknoloji olsa da belirli durumlarda hâlâ faydalı olabilir; özellikle legacy sistemlerle uyumluluğun önemli olduğu yerlerde kullanılabilir.
  • Gerçek zamanlı iletişim teknolojisi seçerken uygulamanın gereksinimlerini, desteklenen tarayıcıları ve sunucu altyapısını, ayrıca teknolojinin olgunluk seviyesini dikkate almak gerekir.

1 yorum

 
GN⁺ 2024-03-19
Hacker News görüşleri
  • Server Sent Events (SSE) için bir sempati dile getirilirken, WebSockets'te akış kontrolü (backpressure) ve çoklama eksikliği, SSE'nin ikili veri aktaramaması ve WebTransport'un benimsenmesinde yaşanabilecek olası sorunlardan bahsediliyor.

    "Server Sent Events'e karşı bir sempati duyduğunu, WebSockets'te akış kontrolü ve çoklama eksikliği, SSE'nin ikili veri aktarım sınırlamaları ve WebTransport'un benimsenme sorunları konusunda endişe taşıdığını belirtiyor."

  • Kurumsal ortamlarda gerçek zamanlı özellikleri hayata geçirmenin zorluğuna ve bürokrasi nedeniyle sorun çözmenin sınırlarına dikkat çekilerek, basit bir çözüm olarak yenile düğmesi eklenmesi öneriliyor.

    "Kurumsal ortamlarda gerçek zamanlı özellikleri uygulamanın zorluğuna ve bürokrasi sorunlarına dikkat çekiyor, basit bir çözüm olarak yenile düğmesi eklenmesini öneriyor."

  • HTTP/2 ve üzerinin varsayıldığı durumda, EventSource ile fetch() kombinasyonunun tek bir TCP bağlantısı kullanan diğer protokoller kadar iyi olabileceği ve HTTP/3'ün UDP kullanmasına dair olumlu bir görüş paylaşılıyor.

    "HTTP/2 veya üzeri kullanıldığında EventSource ve fetch() kombinasyonunun verimliliği ile HTTP/3'ün UDP kullanımı hakkında olumlu bir görüş sunuyor."

  • WebSockets ve SSE'nin ilk istekte neden header göndermeyi desteklemediğinin anlaşılmadığı, bunun gerçek zamanlı servislerde kimlik doğrulamasını uygulayan kişiye bırakılmış bir durum olduğu belirtiliyor.

    "WebSockets ve SSE'nin ilk istek sırasında header gönderimini desteklememesi konusundaki soru işaretini ve gerçek zamanlı servis kimlik doğrulamasının uygulayıcıya bağımlı olması sorununu dile getiriyor."

  • WebSockets ve SSE'nin büyük ölçekte yönetim zorlukları, backend tarafında özel gözlemlenebilirlik ihtiyacı, mobil cihazlarda debug etmenin zorluğu, ağ bağlantılarının maliyeti ve durum korumanın güçlüğünden söz ediliyor.

    "WebSockets ve SSE'nin büyük ölçekte yönetim sorunları, backend ve mobil cihazlarda debug etmenin zorluğu, ağ bağlantısı maliyetleri ve durum koruma sorunlarından bahsediyor."

  • 90'larda tasarlanan bir çevrimiçi açık artırma sisteminde gerçek zamanlı güncellemeleri server push/HTTP streaming ile işlediği deneyimini paylaşıyor.

    "90'larda çevrimiçi açık artırma sisteminde server push/HTTP streaming üzerinden gerçek zamanlı güncellemeleri işleme deneyimini paylaşıyor."

  • Long polling'in sadeliğini özlediğini söylerken, WebRTC hakkında da olumlu bir değerlendirme yapıyor.

    "Long polling'in sadeliğine duyduğu özlemi ve WebRTC hakkındaki olumlu değerlendirmesini ifade ediyor."

  • Stream'de çalışan biri olarak, çoğu durumda her 30 saniyede bir keep-alive ping'i gönderen websockets kullanımını öneriyor; ayrıca WebTransport'un düşük gecikmesi ile gerçek zamanlı oyunlar veya ses verisi aktarımı için değerlendirilmesi gerektiğini belirtiyor.

    "Websockets'te keep-alive ping kullanımını öneriyor ve WebTransport'un düşük gecikmesi ile gerçek zamanlı oyunlar ve ses verisi aktarımı için değerlendirilmesini tavsiye ediyor."

  • Makalenin WebRTC'nin UDP tabanlı iletişim avantajından bahsetmemesini eleştiren bir görüş paylaşılıyor.

    "Makalede WebRTC'nin UDP tabanlı iletişim avantajının atlanmış olmasını eleştiriyor."