Sobes.tech
Junior

Web soketleri nedir?

sobes.tech yapay zeka

AI'dan gelen yanıt

Websockets (Websockets) — bu, tek bir TCP bağlantısı üzerinden çift yönlü iletişim protokolüdür ve tarayıcı ile sunucu arasında gerçek zamanlı veri alışverişine olanak tanır.

Geleneksel HTTP isteklerinden temel farklar:

  • İki yönlü iletişim: Sunucu, istemciden önceden istek olmadan veri gönderebilir.
  • Tek bağlantı: Uzun ömürlü tek bir bağlantı kurulur, böylece her veri alışverişi için yeni bağlantı kurma maliyetleri ortadan kalkar (HTTP gibi).
  • Gecikmeyi azaltma: Bağlantı kurma, başlıkların değiştirilmesi ve kısa istek/yanıtların işlenmesine daha az zaman harcanır.

Çalışma prensibi:

  1. Handshake: Tarayıcı, sunucuya özel bir HTTP isteği gönderir (Upgrade: websocket ve Connection: Upgrade başlıklarıyla).
  2. Bağlantı kurulması: Sunucu websocketleri destekliyorsa, 101 Switching Protocols koduyla yanıt verir ve bağlantı websocket protokolüne geçer.
  3. Veri iletimi: Bağlantı kurulduktan sonra, her iki taraf da istedikleri zaman mesaj alışverişinde bulunabilir.

Kullanım örnekleri:

  • Çevrimiçi oyunlar
  • Sohbetler ve mesajlaşma uygulamaları
  • Gerçek zamanlı veri güncellemeleri (kurlar, haberler)
  • İşbirlikçi araçlar

Avantajlar:

  • Düşük gecikme
  • Kaynakların verimli kullanımı (daha az overhead)
  • Gerçek zamanlı çift yönlü iletişim

Dezavantajlar:

  • Hem istemci (tarayıcı) hem de sunucu tarafında destek gerektirir.
  • Basit HTTP isteklerine kıyasla daha karmaşık uygulama.

JavaScript ile müşteri kodu örneği:

// websocket oluşturma
const socket = new WebSocket('wss://example.com/websocket');

// bağlantı açıldığında çalışan fonksiyon
socket.onopen = function(event) {
  console.log('Bağlantı kuruldu');
  socket.send('Merhaba, sunucu!'); // sunucuya mesaj gönder
};

// mesaj alındığında çalışan fonksiyon
socket.onmessage = function(event) {
  console.log('Sunucudan alınan mesaj: ' + event.data);
};

// bağlantı kapandığında çalışan fonksiyon
socket.onclose = function(event) {
  if (event.wasClean) {
    console.log(`Temiz şekilde kapandı, kod=${event.code} neden=${event.reason}`);
  } else {
    console.log('Bağlantı kesildi'); // örneğin, ağ hatası nedeniyle
  }
};

// hata durumunda çalışan fonksiyon
socket.onerror = function(error) {
  console.error(`Websocket hatası: ${error}`);
};

// gerekirse bağlantıyı kapatma
// socket.close();