Polling , Long Polling ve WebSocket
İnternet tabanlı uygulamaların gelişimi, gerçek zamanlı veri akışı ve anlık etkileşim ihtiyacını artırdı. Geleneksel HTTP protokolü, istemci-sunucu arasında tek yönlü bir iletişim modeli sağlar ve bu da sürekli güncel veri alışverişini zorlaştırır. Bu sorunu çözmek için polling, long polling ve WebSockets gibi teknikler geliştirilmiştir. Polling, istemcinin belirli aralıklarla sunucuya istek göndererek güncellemeleri kontrol etmesini sağlar. Long polling, istemcinin sunucuya istek göndermesi ve sunucunun yeni veri olduğunda yanıt vermesi için beklemesidir. WebSockets ise tam çift yönlü iletişim sağlayarak sürekli bir bağlantı üzerinden veri alışverişini gerçekleştirir. Bu yazıda, bu tekniklerin nasıl çalıştığını ve farklı senaryolarda nasıl tercih edildiğini inceleyeceğiz.
POLLING
Polling clientin server’a periodik olarak yeni bir mesaj olup olmadığını soruduğu bir tekniktir. Bu sorma işleminin sıklığına göre çok fazla round trip olacağı için polling işlemi oldukça maliyetli olabilir ve server tarafında hiç bir mesaj olmasa bile çok fazla resource tüketebilir.
Kısaca pollingin dezavantajları
- Verimliliği düşüktür, çünkü sürekli olarak sorgu gönderilir.
- Gecikme olabilir, çünkü istemci belirli aralıklarla sorgu gönderir ve sunucu bu sorgulara yanıt verir.
- Yüksek trafik oluşturabilir, özellikle büyük ölçekli uygulamalarda.
- Gerçek zamanlı uygulamalar için uygun değildir, çünkü veri güncelleme sıklığı kullanıcı deneyimini etkileyebilir.
LONG POLLING
Anlaşılacağı üzere polling efficient bir yol değil. Bir diğer teknik ise long polling. Long pollingte server side’a gönderilen connection ya yeni bir mesaj gelene kadar ya da timeout süresi dolana kadar açık tutulur. Yani daha uzun süre bekleyen open bir connection vardır. Yeni mesaj geldiğinde client bunu alır ve akabinde yeni request gönderir. Dolayısıyla daha gerçek zamanlı iletişim sağlamak için kullanılır.
Long polling, özellikle HTTP 1.1’in yaygın olduğu dönemlerde popüler hale geldi. HTTP 1.1’den önce her requestte servera yeni bir connection yaratılırdı. HTTP 1.1 ile birlikte birden çok request/response çifti için tek bir tcp connectionı kullanılabilir hale geldi. Bu yeni yapı http-keep alive ya da http persistent connection olarak adlandırılır. HTTP 1.1, sunucunun istemciye yanıt verirken bağlantıyı açık tutmasına izin verir. HTTP 1.1’in Keep-Alive özelliği, long polling gibi uzun süreli bağlantıları destekler. Böylece istemciler sunucuya bağlı kalabilir ve sunucudan anlık güncellemeler alabilirler. Bu, long polling için uygun bir zemin sağladı çünkü sunucu istemcinin yeni veri olana kadar beklemesine olanak tanıyabiliyordu.
Long polling’in avantajları şunlardır:
- Daha gerçek zamanlı iletişim sağlar çünkü sunucu istemciye yanıt verene kadar bekler ve istemci hemen yeni bir istek gönderir.
- Düşük trafik oluşturur, çünkü istemci sadece gerektiğinde sunucuya istek gönderir ve round trip düşer.
Ancak long polling’in dezavantajları da vardır:
- Sunucu kaynaklarını tüketebilir, çünkü her bağlantı için uzun süreler boyunca açık kalması gerekebilir.
- Bazı durumlarda, sunucu ve ağ kaynaklarını verimsiz şekilde kullanabilir, özellikle uzun süre bekleyen isteklerde.
- İstemci ve sunucu arasında sürekli bir bağlantı olduğu için, bazı durumlarda bağlantı kopmaları yaşanabilir ve yeniden bağlantı kurmak gerekebilir.
WEBSOCKET
Web soketleri, istemci ve sunucu arasında tam çift yönlü iletişim sağlayan bir iletişim protokolüdür. Websocket tek bir tcp connectionu üzerinden çift yönlü ve full duplex mesajlaşmayı sağlar. Connection yine client tarafından başlatılır. Diğer iletişim yöntemlerinden farklı olarak, web soketleriyle sunucu istemciden bağımsız olarak istemciye veri gönderebilir ve istemci sunucuya istek gönderebilir.
Web soketlerinin bazı temel özellikleri şunlardır:
- Tam Çift Yönlü İletişim: Web soketleri, istemci ve sunucu arasında tam çift yönlü iletişim sağlar. Bu, her iki tarafta da bağımsız olarak veri gönderme ve almayı mümkün kılar.
- Düşük Gecikme Süresi: Web soketleri, long polling gibi diğer tekniklere göre daha düşük gecikme süreleri sağlar. Bu, gerçek zamanlı iletişim gerektiren uygulamalarda önemlidir.
- Etkinlik Tabanlı Model: Web soketleri, etkinlik tabanlı bir modelle çalışır. Yani, sunucu bir veri veya olay gönderdiğinde, istemci bunu hemen alır ve işler.
- Protokol ve API: Web soketleri için standart bir protokol bulunur (WebSocket Protocol). Bu protokol, istemci ve sunucu arasındaki iletişim için belirlenmiş bir API sağlar.
- Bağlantı Sürdürme: Web soketleri, sürekli açık bir bağlantı sürdürür. Bu, sunucunun istemciye anında veri gönderebilmesini sağlar ve gerektiğinde istemci de sunucuya veri gönderebilir.
Web soketlerinin kullanım alanları şunları içerir:
- Gerçek zamanlı sohbet uygulamaları
- Çok oyunculu oyunlar
- Canlı yayınlar ve akışlar
- Uzaktan denetim uygulamaları
- Gerçek zamanlı analitik ve izleme sistemleri