WebSocket Guncellenmiyor
Semptomlar
- Dashboard acik ama sensor degerleri donmus (son guncelleme zamani degismiyor)
- Sayfa yenileyince (F5) veriler geliyor ama kisa sure sonra tekrar donuyor
- Tarayici konsolunda WebSocket hata mesajlari gorunuyor
- Bazi kullanicilar etkileniyor, bazilari normal calisiyor
Olasi Sebepler
- Nginx proxy timeout — WebSocket baglantisini zaman asimina ugratıyor
- Backend WebSocket hub cokmus veya yanit vermiyor
- Client reconnect mantigi calismıyor (baglanti kopmus ama yeniden baglanmiyor)
- Ping/pong keepalive calismıyor, proxy idle baglantıyı kesiyor
- SSL sertifika sorunu — WSS baglantisi kurulamiyor
- Tarayici limiti — cok fazla WebSocket baglantisi acilmis
Teshis Adimlari
1. Browser DevTools ile Kontrol
Kullanicidan asagidaki adimlari yapmasini isteyin:
1. F12 ile DevTools ac
2. Network sekmesine git
3. WS (WebSocket) filtresini sec
4. Mevcut WebSocket baglantılarini incele:
- Status: 101 (Switching Protocols) olmali
- Messages sekmesinde mesaj akisi var mi?
- Frames sekmesinde ping/pong goruluyor mu?
5. Console sekmesinde WebSocket ile ilgili hata mesajlari var mi?
2. Backend WebSocket Hub Durumunu Kontrol Et
# Backend health check
curl -s -o /dev/null -w "%{http_code}" http://localhost:8000/api/v1/health
# WebSocket endpoint'ine HTTP upgrade testi
curl -s -o /dev/null -w "%{http_code}" \
-H "Connection: Upgrade" \
-H "Upgrade: websocket" \
-H "Sec-WebSocket-Version: 13" \
-H "Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==" \
http://localhost:8000/ws/
# Backend loglarinda WebSocket ile ilgili hatalari ara
docker logs --tail 300 zeus-backend 2>&1 | grep -i "websocket\|ws\|upgrade\|connection"
# Aktif WebSocket baglanti sayisini kontrol et
docker logs --tail 100 zeus-backend 2>&1 | grep -i "ws_connections\|active_connections"
3. Nginx Proxy Konfigurasyonunu Kontrol Et
# Nginx WebSocket proxy ayarlarini kontrol et
docker exec zeus-nginx cat /etc/nginx/conf.d/default.conf | grep -A 20 "location.*ws"
# Nginx hata loglarini incele
docker logs --tail 200 zeus-nginx 2>&1 | grep -i "upstream\|timeout\|websocket"
# Nginx aktif baglanti sayisi
docker exec zeus-nginx nginx -T 2>/dev/null | grep -i "proxy_read_timeout\|proxy_send_timeout\|keepalive"
4. WebSocket Baglantisini Dogrudan Test Et
# wscat ile WebSocket baglantisi testi (wscat yuklu degilse: npm install -g wscat)
wscat -c "ws://localhost:8000/ws/?token={JWT_TOKEN}"
# websocat ile test (alternatif)
websocat "ws://localhost:8000/ws/?token={JWT_TOKEN}"
# curl ile WebSocket upgrade testi
curl -i -N \
-H "Connection: Upgrade" \
-H "Upgrade: websocket" \
-H "Sec-WebSocket-Version: 13" \
-H "Sec-WebSocket-Key: $(openssl rand -base64 16)" \
"http://localhost:8000/ws/?token={JWT_TOKEN}"
5. SSL/TLS Kontrolu (WSS icin)
# SSL sertifika gecerliligi
openssl s_client -connect localhost:443 -servername enerji.kepmark.com < /dev/null 2>/dev/null \
| openssl x509 -noout -dates
# WSS baglantisi testi
wscat -c "wss://enerji.kepmark.com/ws/?token={JWT_TOKEN}" --no-check
# Nginx SSL ayarlarini kontrol et
docker exec zeus-nginx cat /etc/nginx/conf.d/default.conf | grep -A 10 "ssl"
6. Sunucu Kaynak Kullanımını Kontrol Et
# Backend container CPU ve bellek kullanimi
docker stats --no-stream zeus-backend
# Acik dosya tanımlayıcı (file descriptor) sayisi
docker exec zeus-backend cat /proc/1/limits | grep "open files"
docker exec zeus-backend ls /proc/1/fd | wc -l
# Aktif TCP baglantilari
docker exec zeus-backend ss -s
Cozum Adimlari
Nginx proxy_read_timeout Artir
# Nginx konfigurasyonunu kontrol et
docker exec zeus-nginx cat /etc/nginx/conf.d/default.conf
# WebSocket lokasyonu icin timeout degerlerini guncelle
# Asagidaki ayarlar nginx konfigurasyonunda olmali:
#
# location /ws/ {
# proxy_pass http://backend:8000;
# proxy_http_version 1.1;
# proxy_set_header Upgrade $http_upgrade;
# proxy_set_header Connection "upgrade";
# proxy_set_header Host $host;
# proxy_set_header X-Real-IP $remote_addr;
# proxy_read_timeout 86400s; # 24 saat (varsayilan 60s cok kisa!)
# proxy_send_timeout 86400s;
# }
# Konfigurasyonu test et
docker exec zeus-nginx nginx -t
# Nginx'i yeniden yukle (kesintisiz)
docker exec zeus-nginx nginx -s reload
WebSocket Ping/Pong Keepalive Ayarla (30s)
# Backend WebSocket ping ayarini kontrol et
# Backend konfigurasyonunda asagidaki environment variable'lar ayarli olmali:
# WS_PING_INTERVAL=30 (saniye, her 30 saniyede bir ping gonder)
# WS_PING_TIMEOUT=10 (saniye, pong icin bekleme suresi)
# WS_MAX_CONNECTIONS=1000 (maksimum esanli WebSocket baglantisi)
# Backend loglarinda ping/pong aktivitesini kontrol et
docker logs --tail 100 zeus-backend 2>&1 | grep -i "ping\|pong\|keepalive"
# Degisiklik sonrasi backend'i yeniden baslat
docker compose restart backend
Backend WebSocket Hub Restart
# Backend container'ini yeniden baslat
docker compose restart backend
# Restart sonrasi health check
curl -s http://localhost:8000/api/v1/health | python3 -m json.tool
# WebSocket endpoint'inin calismaya basladigini dogrula
timeout 10 wscat -c "ws://localhost:8000/ws/?token={JWT_TOKEN}" --execute "ping"
Client Reconnect Mantigi Kontrolu
Frontend kodunda WebSocket reconnect mantığının dogru calistigini dogrulayin:
# Frontend kodunda reconnect mantıgını kontrol et
# Beklenen davranis:
# 1. Baglanti kopunca otomatik yeniden baglanma denemesi
# 2. Exponential backoff (1s, 2s, 4s, 8s, maks 30s)
# 3. Maksimum deneme sayisi (ornegin 50)
# 4. Kullaniciya baglanti durumu gosterimi
# Frontend build'ini kontrol et
docker logs --tail 50 zeus-frontend 2>&1 | grep -i "build\|error"
# Frontend container durumu
docker compose ps frontend
Cok Fazla Baglanti Durumunda
# Aktif WebSocket baglanti sayisini kontrol et
docker exec zeus-backend python3 -c "
# WebSocket manager'dan baglanti sayisini al
import asyncio
# Bu komut backend icerisinde calismali
"
# Backend'de baglanti limitini kontrol et
docker exec zeus-backend env | grep -i "WS_MAX_CONNECTIONS\|MAX_CONNECTIONS"
# Eger limit asilmissa eski baglantiları temizle
# Backend restart ile tum baglantilar sifirlanir
docker compose restart backend
Frontend Cache Temizleme
# Frontend static dosyalarının guncel oldugunu dogrula
# Next.js build hash kontrolu
docker exec zeus-frontend ls -la /app/.next/static/chunks/ | head -10
# Kullaniciya oneriler:
# 1. Tarayici cache'ini temizle (Ctrl+Shift+Delete)
# 2. Hard refresh yap (Ctrl+Shift+R)
# 3. Farkli tarayicida dene
# 4. Incognito/Private modda dene
Eskalasyon
Asagidaki durumlarda eskalasyon yapin:
- Tum kullanicilar etkileniyorsa ve backend restart ise yaramadiysa — backend ekibine bildirin
- SSL sertifika suresi dolmussa veya gecersizse — DevOps ekibine ACIL bildirin
- Nginx tamamen yanit vermiyorsa — altyapi ekibine bildirin
- Bellek sizintisi suphesi — WebSocket baglantilari kapanmiyor, bellek surekli artiyorsa
- File descriptor limiti asilmissa — isletim sistemi ayarlari guncellenmeli
- Intermittent sorun — duzensiz aralıklarla tekrarlıyorsa, ag altyapisi (load balancer, firewall) incelenmeli