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.
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.
Sıkça Sorulan Sorular"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."