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:
- Handshake: Tarayıcı, sunucuya özel bir HTTP isteği gönderir (
Upgrade: websocketveConnection: Upgradebaşlıklarıyla). - Bağlantı kurulması: Sunucu websocketleri destekliyorsa,
101 Switching Protocolskoduyla yanıt verir ve bağlantı websocket protokolüne geçer. - 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();