WebSocket Nedir? Tanımı, Nasıl Çalışır ve Kullanım Alanları

WebSocket, web tarayıcısı ile sunucu arasında kalıcı, çift yönlü iletişim sağlayan bir internet protokolüdür. HTTP protokolünden farklı olarak, bağlantı bir kez kurulduktan sonra açık kalır ve sunucu ile istemci (tarayıcı) arasında anlık veri alışverişi yapılabilir.

5 dk okuma
WebSocket

WebSocket, web tarayıcısı ile sunucu arasında kalıcı, çift yönlü iletişim sağlayan bir internet protokolüdür. HTTP protokolünden farklı olarak, bağlantı bir kez kurulduktan sonra açık kalır ve sunucu ile istemci (tarayıcı) arasında anlık veri alışverişi yapılabilir. Bu teknoloji, sohbet uygulamaları, canlı bildirimleri, finansal veriler ve çok oyunculu oyunlar gibi gerçek zamanlı veri transferi gerektiren sistemlerde kullanılır.

WebSocket Nasıl Çalışır?

WebSocket bağlantısı HTTP handshake ile başlar. Tarayıcı sunucuya özel bir HTTP isteği gönderir ve sunucu bu isteği kabul ederse, protokol WebSocket'e yükseltilir. Bu noktadan itibaren bağlantı açık kalır ve her iki taraf da birbirlerine mesaj gönderebilir.

Adım adım çalışma süreci:

  • Handshake: Tarayıcı, sunucuya "Upgrade: websocket" başlığını içeren bir HTTP GET isteği gönderir.
  • Protokol Yükseltme: Sunucu isteği kabul eder ve HTTP'den WebSocket protokolüne geçilir.
  • Kalıcı Bağlantı: Bağlantı açık kalır; veri çerçeveleri (frames) halinde gönderilir.
  • Çift Yönlü İletişim: Sunucu veya istemci istediği zaman mesaj gönderi ve alabilir.
  • Bağlantı Kapatma: İhtiyaç duyulduğunda her iki taraf da bağlantıyı sonlandırabilir.

Veri, küçük paketler halinde (frame) iletilir. Her frame'in başında, mesajın türünü (text veya binary), boyutunu ve diğer meta bilgileri içeren bir header bulunur.

WebSocket ile HTTP Arasındaki Fark

Özellik HTTP WebSocket
Bağlantı Türü Tek yönlü Çift yönlü
Bağlantı Süresi Her istek sonunda kapanır Açık kalır
Overhead (Yük) Her istek yeni header içerir İlk handshake sonrası minimal
Veri Gönderimi İstemci sorgulamalı Sunucu proaktif olarak gönderebilir
Gecikme Daha yüksek Çok düşük (gerçek zamanlı)
Tipik Kullanım Web sayfaları, API'ler Canlı sohbet, bildirimler

WebSocket'in Avantajları

  • Gerçek Zamanlı İletişim: Sunucu istemciye anlık olarak veri gönderebilir, gecikme minimal seviyededir.
  • Düşük Bant Genişliği Kullanımı: HTTP'nin aksine her mesajla header gönderilmez, veri daha verimli iletilir.
  • Daha Az Sunucu Yükü: Tekrarlanan istek/yanıt döngüsü olmadığı için sunucu işlemcisi rahatlar.
  • Iki Yönlü İletişim: Sunucu ve istemci eşit şekilde haberleşebilir, herhangi bir hiyerarşi yoktur.
  • Daha Hızlı Veri Transferi: Minimal overhead ile yüksek hacimli veri hızlı şekilde iletilir.
  • Mobil Cihazlarda Verimli: Batarya tüketimi daha azdır çünkü bağlantı sürekli açık kalır, tekrar kurmaya gerek yoktur.

WebSocket'in Dezavantajları

  • Proxy Uyumluluğu Sorunları: Bazı şirket ağlarında proxy ayarları WebSocket'i engelleyebilir.
  • İlk Kuruluş Overhead'ı: Handshake süreci, basit HTTP isteklerinden daha fazla süre alabilir.
  • Stateful Bağlantı: Sunucu aktif bağlantıların durumunu takip etmek zorundadır; bu bellek tüketimi artırır.
  • Karmaşık Hata Yönetimi: Bağlantı koptuğunda otomatik yeniden kuruluş mekanizması yoktur, uygulamada kodlanmalıdır.
  • Güvenlik Dikkat Gerektirir: Açık bağlantı, yanlış yapılandırılırsa güvenlik açığına neden olabilir.

WebSocket Nerede Kullanılır?

  • Sohbet Uygulamaları: WhatsApp Web, Telegram, Slack gibi anlık mesajlaşma platformları.
  • Canlı Bildirimler: E-ticaret sitelerinde stok güncellemeleri, kargo takibi bildirimleri.
  • Finansal Uygulamalar: Borsa fiyatlarının anlık gösterilmesi, kripto para borsaları.
  • Çok Oyunculu Oyunlar: Multiplayer oyunlarda oyuncu koordinasyonu ve skor güncellemeleri.
  • Canlı Yayın Uygulamaları: Twitch, YouTube Live gibi platformlarda yorum ve tepki senkronizasyonu.
  • Eğitim Platformları: Canlı derslerde öğretmen-öğrenci etkileşimi ve anlık feedback.
  • İşbirliği Araçları: Google Docs, Figma gibi ortak editörlerde gerçek zamanlı yazı yazma gösterimi.
  • IoT ve Sensör Verileri: Gerçek zamanlı sensör okumaları ve kontrol sistemleri.

WebSocket Türleri ve Protokolü

Standart WebSocket Protokolü:

RFC 6455 tarafından tanımlanan resmi standarttır. ws:// (şifresiz) ve wss:// (SSL/TLS ile şifreli) olmak üzere iki türü vardır. Günümüzde güvenlik nedeniyle wss:// tercih edilmektedir.

WebSocket Üzerine Kurulmuş Protokoller:

  • Socket.IO: Node.js uygulamalarında WebSocket desteği ve fallback mekanizması sağlayan kütüphane.
  • SockJS: WebSocket desteklemeyenler için HTTP polling gibi alternatif yöntemleri kullanan wrapper.
  • STOMP: Mesajlaşma için daha yüksek seviye protokol, Spring Framework ile yaygın.

WebSocket Güvenliği

Güvenli bağlantı için alınması gereken önlemler:

  • wss:// Kullanın: Şifreleme olmayan ws:// protokolü yerine, TLS ile şifreli wss:// kullanın.
  • Authentication: Bağlantıya izin vermeden önce kullanıcıyı doğrulayın.
  • Token Doğrulaması: Her mesajla gelen token'ı kontrol edin.
  • Rate Limiting: Spam ve DoS saldırılarını engellemek için mesaj hızını sınırlayın.
  • Input Validation: Gelen tüm verileri doğrulayın, injection saldırılarını engeller.

Tarihçesi

WebSocket, 2009 yılında HTML5 belirtiminin bir parçası olarak önerildi. 2011 yılında RFC 6455 olarak IETF tarafından resmi standart hale getirildi. O zamandan itibaren tüm modern web tarayıcıları tarafından desteklenmektedir. Gerçek zamanlı web uygulamalarının yaygınlaşmasıyla birlikte Socket.IO, SockJS gibi kütüphaneler geliştirilmiş ve WebSocket ekosistemi genişlemiştir.

"WebSocket, modern web uygulamalarının gerçek zamanlı haberleşme ihtiyaçlarını karşılamada en etkili teknoloji haline gelmiştir. HTTP protokolünün sınırlamalarından kurtularak, düşük gecikme ve yüksek verimlilikte veri transferi mümkün kılmıştır."

Sıkça Sorulan Sorular
WebSocket ile normal HTTP isteği arasındaki en temel fark nedir?+
HTTP istek-yanıt modeline dayalı tek yönlüdür; her istek sonunda bağlantı kapanır. WebSocket ise bağlantı açık kalır ve sunucu ile istemci istediği zaman birbirlerine veri gönderebilir. Bu sayede gerçek zamanlı iletişim sağlanır.
WebSocket bağlantısı kurulmak için ne gereklidir?+
Tarayıcının WebSocket desteği, sunucu tarafında WebSocket protokolü için kod yazılmış olması ve ağda WebSocket trafiğine izin verilmiş olması gereklidir. Modern tüm tarayıcılar WebSocket'i destekler. Sunucu tarafında Node.js, Python, Java vb. dillerde Socket.IO veya benzeri kütüphaneler kullanılabilir.

W harfindeki diğer terimler