Real-time Nedir?
Sunucu ve istemci arasında anlık, çift yönlü iletişim. Mesajlaşma, canlı bildirimler, oyun, finans verileri gibi anlık güncelleme gerektiren senaryolar. 2026 itibarıyla real-time özellikler, kullanıcı beklentisinin standart parçası haline gelmiştir (chat, canlı bildirim, collaborative editing).
Teknolojiler
WebSocket
- Tam çift yönlü (full-duplex) bağlantı
- Tek TCP bağlantısı üzerinden sürekli iletişim
- Düşük latency (HTTP overhead yok)
- En yaygın real-time çözümü
- RFC 6455 standardı
Server-Sent Events (SSE)
- Tek yönlü (sunucu → istemci)
- HTTP üzerinden çalışır (proxy/firewall dostu)
- Otomatik reconnect (tarayıcı tarafından)
- Basit implementasyon
- AI streaming yanıtlar için ideal (ChatGPT benzeri)
- Sadece sunucudan veri akışı yeterliyse
Long Polling
- HTTP isteği sunucuda bekler, veri olduğunda yanıt döner
- WebSocket desteklenmediğinde fallback
- Daha yüksek overhead (her yanıtta yeni bağlantı)
- Eski tarayıcılar/ortamlar için son çare
MQTT
- IoT ve mobil için hafif protokol
- Publish/subscribe modeli
- Düşük bant genişliği (header çok küçük)
- Bağlantı kopmaları için "last will" mekanizması
- QoS seviyeleri (0: at most once, 1: at least once, 2: exactly once)
Kullanım Alanları
| Senaryo | Önerilen Teknoloji |
|---|---|
| Chat/mesajlaşma | WebSocket |
| Canlı bildirimler | WebSocket veya SSE |
| Canlı konum takibi | WebSocket |
| Finans/kripto verileri | WebSocket |
| Feed güncelleme | SSE veya polling |
| IoT sensör verisi | MQTT |
| Multiplayer oyun | WebSocket |
| AI streaming yanıt | SSE |
| Collaborative editing | WebSocket (CRDT ile) |
Platformlar ve Kütüphaneler
Socket.io
- WebSocket + fallback (long polling)
- Room ve namespace desteği (grup mesajlaşma)
- Otomatik reconnect
- React Native uyumlu (
socket.io-client) - Binary data desteği
Ably
- Managed real-time platform
- Global dağıtım, %99.999 uptime SLA
- Presence (kim online?)
- Message history ve persistence
Pusher
- Managed WebSocket hizmeti
- Channel bazlı mesajlaşma
- Kolay entegrasyon, geniş SDK desteği
- Pusher Beams ile push notification
Firebase Realtime / Firestore
- Gerçek zamanlı veri senkronizasyonu
- Offline destek (otomatik senkronizasyon)
- Otomatik reconnect
- Security Rules ile güvenlik
Supabase Realtime
- PostgreSQL changes dinleme (CDC - Change Data Capture)
- Presence ve broadcast
- Channel bazlı dinleme
- RLS (Row Level Security) ile güvenlik
Mobil Dikkat Noktaları
Bağlantı Yönetimi
- Reconnect stratejisi (exponential backoff: 1s → 2s → 4s → max 30s)
- Arka plana geçince bağlantı durumu (iOS arka planda WebSocket kapatabilir)
- Ağ değişikliği (WiFi ↔ mobil veri - NetInfo ile izleme)
- Bağlantı kalitesi tespiti (ping/pong heartbeat)
Batarya
- Sürekli bağlantı batarya tüketir
- Heartbeat aralığını optimize et (30-60 saniye)
- Gerekmedikçe bağlantıyı kapat
- Background mode sınırlamaları (iOS özellikle katı - BackgroundTasks framework)
Offline Handling
- Bağlantı koptuğunda mesajları kuyruğa al
- Reconnect olduğunda senkronize et (last event ID ile)
- Kullanıcıya bağlantı durumunu göster (yeşil/kırmızı gösterge)
- Conflict resolution stratejisi belirle (last write wins, merge, CRDT)
Best Practices
- WebSocket'i sadece gerçek real-time gerektiğinde kullan
- Polling yeterliyse polling kullan (daha basit, daha az batarya)
- Reconnect ve error handling kritik (kullanıcıya bilgi ver)
- Bağlantı durumu UI'da göster
- Arka planda bağlantıyı yönet (kapat veya minimize et)
- Message queue ile mesaj kaybını önle
- Rate limiting uygula (spam koruması)
- Compression kullan (permessage-deflate extension)
Real-time "cool" ama her uygulama için gerekli değil. 5 saniyelik gecikme kabul edilebilirse polling yeterli. Gerçekten anlık iletişim gerekiyorsa WebSocket tercih edin.