IHS Strategic
Tüm Blog Yazıları
HowTo09 Eylül 2026•3 dk okuma

WebSockets ile Gerçek Zamanlı Bildirim ve Mesajlaşma Altyapısı Kurulumu Rehberi

Modern web uygulamalarında düşük gecikmeli veri iletişimi sağlayan WebSockets altyapısı kurulumu, ölçekleme adımları ve mimari optimizasyon rehberi.

S

Sistem Yöneticisi

Kıdemli Yazılım Mimarı

WebSockets Nedir ve Neden Tercih Edilmeli?

Geleneksel HTTP istek-yanıt modeli, tek yönlüdür ve her veri transferinde TCP el sıkışması ek yükü üretir. Modern web mimarilerinde anlık bildirim, sohbet ve canlı veri akışları için çift yönlü (full-duplex) ve kalıcı bir TCP kanalı şarttır. WebSockets, tek bir TCP bağlantısı üzerinden istemci ile sunucu arasında milisaniye seviyesinde veri iletimi sağlar.

HTTP Polling veya Long-Polling yerine WebSockets kullanmak, sunucu CPU yükünü ve bant genişliği tüketimini %80'e kadar azaltır.

Adım 1: Temel WebSocket Sunucusunun Kurulması (Node.js)

Minimal ve yüksek performanslı bir sunucu için hafif ws kütüphanesi yeterlidir. Harici karmaşık framework'ler yerine doğrudan yerel HTTP modülü ile entegre çalışır.

Gerekli Paketler

  • Node.js LTS
  • ws paketi

Sunucu Kodu Örneği

const http = require('http');
const WebSocket = require('ws');

const server = http.createServer();
const wss = new WebSocket.Server({ noServer: true });

server.on('upgrade', (request, socket, head) => {
  // ponytail: Kimlik dogrulama token kontrolu burada yapilmali
  wss.handleUpgrade(request, socket, head, (ws) => {
    wss.emit('connection', ws, request);
  });
});

wss.on('connection', (ws) => {
  ws.isAlive = true;
  ws.on('pong', () => { ws.isAlive = true; });

  ws.on('message', (data) => {
    const payload = JSON.parse(data);
    // Mesaj yayini
    wss.clients.forEach((client) => {
      if (client !== ws && client.readyState === WebSocket.OPEN) {
        client.send(JSON.stringify(payload));
      }
    });
  });
});

// Heartbeat mekanizmasi
setInterval(() => {
  wss.clients.forEach((ws) => {
    if (!ws.isAlive) return ws.terminate();
    ws.isAlive = false;
    ws.ping();
  });
}, 30000);

server.listen(8080);

Adım 2: Dayanıklı İstemci (Client) Bağlantısı ve Heartbeat

Ağ kopmalarında bağlantının otomatik yenilenmesi (exponential backoff) ve ölü bağlantıların tespiti için istemci tarafında yerel WebSocket API kullanılır.

İstemci İmplementasyonu

let socket;
let reconnectInterval = 1000;

function connect() {
  socket = new WebSocket('ws://localhost:8080');

  socket.onopen = () => {
    console.log('Baglanti kuruldu.');
    reconnectInterval = 1000;
  };

  socket.onmessage = (event) => {
    const message = JSON.parse(event.data);
    renderNotification(message);
  };

  socket.onclose = () => {
    setTimeout(connect, Math.min(reconnectInterval *= 2, 30000));
  };

  socket.onerror = (err) => {
    socket.close();
  };
}

Adım 3: Redis Pub/Sub ile Yatay Ölçekleme (Horizontal Scaling)

Birden fazla sunucu örneği (instance) çalıştığında, A sunucusundaki kullanıcı B sunucusundaki kullanıcıya mesaj gönderemez. Bu problemi çözmek için araya Redis Pub/Sub mimarisi eklenir.

  • Yayıncı (Publisher): İstemciden gelen mesajı Redis kanalına iletir.
  • Abone (Subscriber): Diğer sunucu örnekleri Redis kanalını dinler ve kendi bağlı istemcilerine veriyi iletir.

Adım 4: Güvenlik ve Kimlik Doğrulama (Auth)

WebSocket protokolünde özel HTTP başlıkları doğrudan gönderilemez. Güvenli bağlantı için şu standartlar uygulanmalıdır:

  • WSS Protokolü: Trafiğin TLS/SSL üzerinden şifrelenmesi (Port 443).
  • Ticket/Token Bazlı Handshake: Upgrade isteğinde query parametresi veya çerez ile tek kullanımlık bilet doğrulaması.
  • Rate Limiting: IP ve kullanıcı başına saniyelik mesaj sınırı uygulanması.

Modern Web ve Dijital Ajans Projelerinde Trendler

Bir dijital ajans için gerçek zamanlı özellikler; e-ticaret stok güncellemeleri, canlı destek panelleri ve SaaS ürünlerinin etkileşimini artırır. Güncel trendler, WebSocket yönetimini Edge Functions (Cloudflare Workers, Fastly) ve sunucusuz mimariler ile birleştirerek gecikmeyi 20ms altına düşürmeye odaklanmaktadır.

Özet Kontrol Listesi

  • Kalıcı bağlantı için TCP Ping/Pong kontrolünü aktif edin.
  • Token doğrulamasını HTTP Upgrade aşamasında bitirin.
  • Çoklu node dağıtımlarında Redis Pub/Sub adaptörü kullanın.
  • WSS (TLS) harici bağlantılara izin vermeyin.