Ana içeriğe geç

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

  1. Nginx proxy timeout — WebSocket baglantisini zaman asimina ugratıyor
  2. Backend WebSocket hub cokmus veya yanit vermiyor
  3. Client reconnect mantigi calismıyor (baglanti kopmus ama yeniden baglanmiyor)
  4. Ping/pong keepalive calismıyor, proxy idle baglantıyı kesiyor
  5. SSL sertifika sorunu — WSS baglantisi kurulamiyor
  6. 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