WebSocket: nedir, tam çift yönlü iletişim protokolü ve nasıl çalışır

Yazar: IT Sectr Yayınlanma: 2026-03-06 Okuma süresi: 8 dk

WebSocket, istemci ve sunucu arasında gerçek zamanlı veri alışverişi için kalıcı bir bağlantı kuran tam çift yönlü bir iletişim protokolüdür. Geleneksel HTTP isteklerinin aksine, bu protokol tek bir bağlantı kurar ve tekrarlanan el sıkışmalar olmadan çift yönlü iletim için kullanır. Mozilla Developer Network (2025)'e göre, WebSocket gerçek zamanlı uygulamalarda HTTP polling'e kıyasla gecikme süresini %50'ye kadar azaltır.

Önemli Noktalar

  • WebSocket gerçek zamanlı veri alışverişi için TCP üzerinde tam çift yönlü bir protokoldür
  • Kalıcı bağlantı her istekte tekrarlanan HTTP el sıkışmalarının yükünü ortadan kaldırır
  • Gecikme süresi başlıkların olmaması nedeniyle HTTP Long Polling'e kıyasla %30-50 azalır
  • Protokol tüm modern tarayıcılar ve mobil platformlar tarafından yerel API'ler aracılığıyla desteklenir
  • Uygulamalar sohbet, çevrimiçi oyunlar, alım satım terminalleri ve IoT cihazlarını içerir

WebSocket Nedir?

WebSocket, TCP üzerinde çalışan ve istemci ile sunucu arasında tam çift yönlü bir kanal sağlayan bir iletişim protokolüdür. 2011 yılında IETF tarafından RFC 6455 olarak standartlaştırılmıştır ve tüm modern tarayıcılar, mobil platformlar ve sunucu çerçeveleri tarafından desteklenmektedir.

İstemcinin bir istek başlattığı ve yanıt aldığı HTTP'nin aksine, WebSocket bağlantı kurulduktan sonra her iki tarafın da istediği zaman mesaj göndermesine olanak tanır. Bu, onu anında teslimat gerektiren senaryolar için ideal kılar: sohbetler, bildirimler, ortak belge düzenleme.

WebSocket protokolü, ilk el sıkışma için HTTP bağlantı noktası 80'i veya HTTPS bağlantı noktası 443'ü kullanır, ardından minimum başlıkla (HTTP'de 800+ bayt yerine yalnızca 2 bayt) kendi protokolüne geçer. Bu özellik, çok sayıda mesajla önemli bir performans avantajı sağlar.

Protokolün Temel Özellikleri

Bir WebSocket bağlantısı, bir HTTP yükseltme isteği (Upgrade) ile başlar, ardından protokol ikili çerçeve formatına geçer. Çerçeve boyutu 2 bayttan 2^63 bayta kadar değişir ve hem kısa metin mesajlarının hem de büyük ikili verilerin iletilmesine olanak tanır. Protokol, mesaj parçalama, istemciden sunucuya veri maskeleme ve bağlantıyı canlı tutmak için ping/pong'u destekler.

WebSocket Nasıl Çalışır?

WebSocket bağlantı kurma süreci iki aşamadan oluşur: el sıkışma ve veri aktarımı. El sıkışma aşamasında istemci, Upgrade: websocket başlığıyla bir HTTP isteği gönderir ve sunucu, 101 Switching Protocols durumuyla protokol değişikliğini onaylar. Bundan sonra bağlantı, tam çift yönlü iletim moduna geçer.

WebSocket'teki her mesaj çerçevelere bölünür. Bir çerçeve, bir opcode (metin, ikili veri, kapatma, ping/pong), yük uzunluğu ve istemciden gelen veriler için bir maskeleme anahtarı içerir. Çerçeveler parçalanabilir — kontrol çerçeveleri (ping/pong) mesaj parçaları arasında iletilebilir ve uzun aktarımlar sırasında bağlantı zaman aşımını önler.

js
const ws = new WebSocket('wss://example.com/chat')

ws.addEventListener('open', () => {
    console.log('Bağlantı kuruldu')
    ws.send('Merhaba, sunucu!')
})

ws.addEventListener('message', (event) => {
    console.log('Alındı:', event.data)
})

ws.addEventListener('close', () => {
    console.log('Bağlantı kapatıldı')
})

Yukarıdaki örnekte, istemci güvenli URL wss://'yi belirterek bir WebSocket nesnesi oluşturur. Bağlantı açıldıktan sonra bir karşılama mesajı gönderilir ve mesaj işleyicisi sunucudan yanıtları alır. Kapatıldığında, kapatma işleyicisi tetiklenir — bu, ağ kesintileri durumunda yeniden bağlantı için önemlidir.

WebSocket vs HTTP: Karşılaştırma

WebSocket ve HTTP arasındaki temel fark, etkileşim modelinde yatmaktadır. HTTP, istek-yanıt şemasına göre çalışır: istemci bir istek başlatır, sunucu bir yanıt döndürür ve bağlantı kapatılır. WebSocket ise, her iki tarafın da istediği zaman iletim başlatabileceği kalıcı bir kanal kurar.

Düşük gecikme süresi ve sürekli veri akışı gerektiren uygulamalar için WebSocket önemli ölçüde daha verimlidir. HTTP Long Polling — sunucunun veri kullanılabilir olana kadar isteği açık tuttuğu bir alternatif — sunucuda aşırı yük oluşturur ve birden çok eşzamanlı bağlantı nedeniyle bellek tüketimini artırır.

ParametreWebSocketHTTP
ModelTam çift yönlüİstek-yanıt
Başlık2-14 bayt400-800 bayt
Kalıcı bağlantıEvet, tekHayır, her istekte yeni
Gecikme süresiDüşük (1-5 ms)Yüksek (50-200 ms)
Protokolws:// veya wss://http:// veya https://

High Performance Browser Networking'e (Grigorik, O'Reilly) göre, WebSocket gerçek zamanlı senaryolarda HTTP Long Polling'e kıyasla ağ gecikme süresini %40-60 oranında azaltırken, tekrarlanan el sıkışmaların ortadan kaldırılması sayesinde sunucu yükü 3-5 kat azalır.

WebSocket Nerelerde Kullanılır?

Düşük gecikme süresi ve çift yönlü iletişimi sayesinde WebSocket, çok çeşitli uygulamalarda kullanılır. Temel senaryolar arasında anlık mesajlaşma, oyunlarda durum senkronizasyonu ve finansal sistemlerde piyasa verisi iletimi yer alır.

Sohbet ve Mesajlaşma

WebSocket, sohbet uygulamaları için fiili standart haline gelmiştir. Slack, Telegram Web ve WhatsApp Web gibi platformlar, anında mesaj teslimi için WebSocket kullanır. Protokol, tek bir kanal üzerinden hem metin mesajları hem de dosyalar göndermeye olanak tanırken, ping/pong mekanizması hareketsizlik dönemlerinde bile bağlantıyı canlı tutar.

Çevrimiçi Oyunlar

Çok oyunculu tarayıcı ve mobil oyunlar, oyuncu durumlarını senkronize etmek için minimum gecikme süresi gerektirir. WebSocket, HTTP isteklerinin gecikmeleri olmadan koordinatları, eylemleri ve olayları gerçek zamanlı olarak iletir. Socket.IO ve Colyseus gibi çerçeveler, düşük seviyeli protokol işlemlerini soyutlayarak otomatik yeniden bağlantı ve odalar ekler.

Finansal Uygulamalar

Alım satım terminalleri ve ticaret platformları, gerçek zamanlı fiyatlar almak için WebSocket kullanır. Birkaç milisaniyelik gecikme milyonlarca dolara mal olabilir, bu nedenle Binance WebSocket Streams, Coinbase Pro gibi finansal API'ler, piyasa verileri için WebSocket arayüzleri sağlar.

Mobil Uygulamalar ve IoT

Mobil geliştirmede WebSocket, yerel API'ler aracılığıyla kullanılır: iOS'ta URLSessionWebSocketTask ve Android'de OkHttp WebSocket. Flutter için web_socket_channel kütüphanesi ve React Native için react-native-websocket bulunur. IoT cihazları, telemetri iletmek ve kontrol komutları almak için WebSocket kullanır, çünkü protokol sürekli HTTP polling'den daha az enerji tüketir.

WebSocket Kod Örnekleri

Node.js ile ws kütüphanesini (JavaScript için en popüler WebSocket uygulaması) kullanan bir sunucu tarafı örneğine bakalım. Sunucu bağlantıları kabul eder, mesajları işler ve bunları bağlı tüm istemcilere iletir.

js
const WebSocket = require('ws')
const wss = new WebSocket.Server({ port: 8080 })

wss.on('connection', (ws) => {
    console.log('Yeni istemci bağlandı')

    ws.on('message', (data) => {
        console.log('Alındı:', data.toString())
        ws.send('Sunucu mesajınızı aldı')
    })

    ws.on('close', () => {
        console.log('İstemci bağlantısı kesildi')
    })
})

console.log('WebSocket sunucusu 8080 bağlantı noktasında başlatıldı')

Sunucu, 8080 bağlantı noktasında bir WebSocket.Server örneği oluşturur ve bağlantıları bekler. Her yeni istemciye, sunucunun bireysel mesajlar gönderebileceği ayrı bir ws nesnesi atanır. Tüm istemcilere mesaj iletme, bağlantı dizisinde yineleme yapılarak uygulanır. Çok sayıda istemciyle (1000'den fazla), Redis tabanlı ölçekleme ve otomatik yeniden bağlantı ekleyen Socket.IO gibi kümeleme destekli kütüphanelerin kullanılması önerilir.

Tüm İstemcilere Mesaj Gönderme

js
wss.clients.forEach((client) => {
    if (client.readyState === WebSocket.OPEN) {
        client.send('Tüm katılımcılar için mesaj')
    }
})

Göndermeden önce readyState kontrolü zorunludur: istemci zaten bağlantıyı kestiyse, send çağrısı bir hata oluşturur. WebSocket.OPEN bayrağı, bağlantının aktif olduğunu ve mesajın iletileceğini garanti eder.

iOS mobil uygulamaları için WebSocket, iOS 13'ten itibaren kullanılabilen URLSessionWebSocketTask aracılığıyla uygulanır. Oturum, wss:// protokol URL'si ile bir görev oluşturur, ardından send ve receive yöntemleri çağrılır. Mesaj alma, önceki mesajı işledikten sonra bir sonraki mesajı bekleyen sürekli receive özyinelemesi yoluyla düzenlenebilir ve yeniden bağlantı olmadan sürekli veri alımı sağlanır. Android için, onOpen, onMessage, onClosing ve onClosed geri çağırmalarının yanı sıra bağlantı kaybında otomatik yeniden bağlantı sağlayan OkHttp WebSocket kullanılır.

Mobil uygulamalarda WebSocket ile çalışırken, yaşam döngüsü yönetimini dikkate almak önemlidir: uygulama arka plana geçtiğinde sistem bağlantıyı sonlandırabilir. iOS'ta, sceneDidBecomeActive delegesi aracılığıyla ön plana dönüldüğünde bağlantı yeniden kurulmalıdır. Android'de, bağlantıyı sürdürmek için Lifecycle-aware bileşenleri veya Service kullanılmalıdır. Ek olarak, geçici ağ sorunları sırasında sunucuda aşırı yük oluşturmamak için yeniden bağlantı için üstel geri çekilme (denemeler arasındaki aralığı 1 saniyeden 30 saniyeye çıkarma) uygulanması önerilir.

Sıkça Sorulan Sorular

WebSocket HTTP'den nasıl farklıdır?

WebSocket, her iki tarafın da istediği zaman veri gönderebileceği kalıcı bir tam çift yönlü bağlantı kurar. HTTP, her değişimde yeni bir bağlantı ve tam başlıklar gerektiren istek-yanıt şemasına göre çalışır. WebSocket, tek bir TCP kanalı ve yalnızca 2-14 baytlık başlıklar kullanarak gecikme süresini büyük ölçüde azaltır.

WebSocket hangi bağlantı noktasını kullanır?

WebSocket, güvenli olmayan bağlantılar (ws://) için 80 numaralı bağlantı noktasını ve güvenli bağlantılar (wss://) için 443 numaralı bağlantı noktasını kullanır. Bu, ek yapılandırma gerektirmeden çoğu proxy sunucusu ve kurumsal güvenlik duvarından geçmesine olanak tanır. TLS şifrelemesi nedeniyle üretim ortamları için 443 numaralı bağlantı noktası önerilir.

WebSocket mobil uygulamalarda destekleniyor mu?

Evet, WebSocket tüm mobil platformlarda desteklenir. iOS'ta, yerel URLSessionWebSocketTask sınıfı iOS 13'ten itibaren kullanılabilir. Android'de — OkHttp WebSocket sınıfı ve standart java.net.WebSocket. React Native için react-native-websocket kütüphanesi bulunur.

WebSocket Secure (wss://) nedir?

WebSocket Secure, TLS üzerinde çalışan protokolün güvenli sürümüdür. Tüm veriler HTTPS'te olduğu gibi şifrelenir. Üretim uygulamaları için, özellikle WebSocket üzerinden kimlik doğrulama belirteçleri veya kişisel veriler iletilirken WSS zorunludur.

WebSocket'in alternatifleri nelerdir?

Ana alternatifler şunlardır: HTTP Long Polling (sunucu isteği açık tutar), Server-Sent Events (sunucudan tek yönlü akış) ve WebRTC Data Channel (eşler arası iletişim). Server-Sent Events uygulaması daha basittir ancak istemciden sunucuya gönderimi desteklemez.

Özet

  • WebSocket, TCP üzerinde çalışan ve RFC 6455 olarak standartlaştırılmış tam çift yönlü gerçek zamanlı bir protokoldür
  • Kalıcı bağlantı HTTP el sıkışma yükünü ortadan kaldırır, gecikme süresini 1-5 ms'ye düşürür
  • Çerçeve başlığı HTTP'deki 400-800 bayta kıyasla yalnızca 2-14 bayttır
  • Kullanılır sohbetlerde, çevrimiçi oyunlarda, alım satım terminallerinde, IoT'de ve ortak düzenlemede
  • WSS TLS şifrelemesi sağlar ve üretim ortamları için önerilir
  • Protokol tüm tarayıcılar, mobil platformlar ve sunucu dilleri tarafından desteklenir
  • Kullanın gerçek zamanlı işlevler için WebSocket, standart REST istekleri için HTTP

Anahtar teslim bir mobil uygulama geliştireceğiz

IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.

Projeyi tartış

Ayrıca okuyun