Blog Yazısı

← Tüm Blog Yazılarına Dön
Web & Ağ Mimarisi • 12 Kasım 2026 • 8 dk okuma

WebSockets Nedir ve Nasıl Çalışır? Çift Yönlü Canlı (Real-Time) İletişim Rehberi

HTTP'nin tek yönlü istek-yanıt sınırlarını aşarak istemci ile sunucu arasında kesintisiz, çift yönlü (full-duplex) canlı veri köprüsü kuran WebSockets protokolü, Handshake süreci, FastAPI/Python uygulaması ve ölçekleme pratikleri.

İnternetin temel taşı olan klasik HTTP protokolü 'İstek ve Yanıt' (Request-Response) döngüsü üzerine kuruludur. Tarayıcınız sunucuya bir soru sorar, sunucu yanıt verir ve bağlantı hemen kapanır. Ancak canlı bir mesajlaşma uygulamasında (WhatsApp Web, Slack), online çok oyunculu bir oyunda veya anlık borsa/kripto fiyat ekranında sunucunun istemciye 'Yeni bir mesaj geldi!' veya 'Fiyat değişti!' diye anında haber vermesi gerekir. HTTP'de sunucu istemciye durup dururken veri gönderemez; çünkü bağlantı tek yönlüdür (Half-Duplex). İşte bu engeli ortadan kaldırıp web dünyasında gerçek zamanlı devrimi başlatan teknoloji 'WebSocket' protokolüdür.

Klasik Yöntemlerin Çıkmazı: Polling ve Long-Polling:
WebSocket'ten önce canlı veri hissi vermek için istemciler sunucuya her 2 saniyede bir 'Yeni mesaj var mı?' diye istek atardı (Short Polling). Bu durum sunucuya milyonlarca boş HTTP isteği yağdırarak sunucu işlemcisini ve bant genişliğini felç ederdi. Long-Polling yönteminde ise sunucu yeni veri gelene kadar isteği bekletir, veri gelince yanıtlayıp bağlantıyı kapatırdı. Ancak her veri alışverişinde TCP el sıkışması ve yüzlerce baytlık HTTP Header (başlık) ek yükü tekrarlanırdı.

WebSocket Nasıl Çalışır? (HTTP 101 Handshake ve Full-Duplex):
WebSocket; TCP üzerinden çalışan, bağımsız ve çift yönlü (Full-Duplex) bir protokoldür. Süreç standart bir HTTP isteğiyle başlar:
1. Handshake (El Sıkışma): Tarayıcı sunucuya 'Upgrade: websocket' ve 'Connection: Upgrade' başlıklarıyla bir HTTP isteği gönderir.
2. Protokol Geçişi: Sunucu destekliyorsa 'HTTP/1.1 101 Switching Protocols' yanıtı döner.
3. Kesintisiz Tünel: Artık HTTP devreden çıkar! Tek bir TCP soket bağlantısı üzerinden istemci ve sunucu istedikleri anda, istedikleri sıklıkta, sadece birkaç baytlık minimal frame (çerçeve) ek yüküyle birbirlerine veri fırlatabilir.

Python ve FastAPI ile Canlı WebSocket Sunucusu Örneği:
Modern Python web çatısı FastAPI, yerleşik WebSocket desteğiyle gelir. Örneğin basit bir mesaj odası:

from fastapi import FastAPI, WebSocket
app = FastAPI()

@app.websocket('/ws/chat')
async def websocket_endpoint(websocket: WebSocket):
await websocket.accept()
while True:
data = await websocket.receive_text()
await websocket.send_text(f'Sunucu Yankısı: {data}')

Bu birkaç satırlık kod ile istemci bağlandığında açık bir kanal kurulur ve mesajlar milisaniyeler içinde çift yönlü akmaya başlar.

Bağlantı Kopmaları, Heartbeat (Ping/Pong) ve Güvenlik:
İnternet ortamında mobil cihazlar tünelden geçerken veya Wi-Fi değiştiğinde bağlantılar sessizce kopabilir. Sunucu ve istemci bu 'hayalet bağlantıları' tespit etmek için düzenli aralıklarla Ping/Pong çerçeveleri gönderir (Heartbeat). Yanıt gelmezse istemci tarafı 'Exponential Backoff' (üstel bekleme) algoritmasıyla otomatik yeniden bağlanma (auto-reconnect) dener.
Güvenlik açısından WebSocket trafiği daima SSL/TLS ile şifrelenmeli ve 'ws://' yerine 'wss://' protokolü kullanılmalıdır. Token doğrulaması ise genellikle Handshake anında Query Parametresi veya Cookie üzerinden yapılır.

Ölçekleme (Scaling): Çoklu Sunucularda Redis Pub/Sub Köprüsü:
Tek bir sunucuda WebSocket çalıştırmak kolaydır. Ancak kullanıcı sayınız arttığında ve uygulamanızı 4 farklı sunucuya dağıttığınızda (Load Balancer arkasında), A sunucusundaki kullanıcının gönderdiği mesaj B sunucusundaki kullanıcıya nasıl gidecektir? Çözüm: Merkezi bir pub/sub mesaj kuyruğudur (Redis Pub/Sub veya RabbitMQ). Bir sunucuya gelen mesaj Redis'e basılır ve Redis o mesajı tüm bağlı sunuculara anında dağıtır.

Sonuç: Gerçek Zamanlı Web'in Omurgası:
Eğer uygulamanız anlık etkileşim, canlı sohbet, ortak çalışma tahtası (Figma tarzı), pano güncellemeleri veya borsa grafiği gerektiriyorsa, WebSocket alternatifsiz en performanslı ve endüstri standardı çözümdür.

← Diğer Yazılar Fikirlerini Paylaş →