Bir WebSocket adresine bağlan, mesaj gönder, gelen çerçeveleri zaman damgasıyla oku ve bağlantı düştüğünde kapanış kodunu gör. Bağlantıyı tarayıcın kurar: adres de mesajlar da Coderspace sunucularına uğramaz.
WebSocket, tarayıcı ile sunucu arasında açık kalan çift yönlü bir bağlantıdır. HTTP’de her veri alışverişi ayrı bir istekle başlar ve yanıt gelince biter; WebSocket’te bağlantı bir kez kurulur, sonra iki taraf da istediği anda mesaj gönderebilir. Sunucunun bir şey iletmesi için istemcinin sormasını beklemesi gerekmez — canlı verinin sürekli sorgulama yapmadan akmasının yolu budur.
Bağlantı sıradan bir HTTP isteğiyle başlar. İstemci Upgrade: websocket başlığını gönderir; sunucu kabul ederse 101 Switching Protocols döner ve aynı TCP bağlantısı o andan itibaren WebSocket protokolüne geçer. Yani WebSocket, HTTP’nin yerine geçen ayrı bir servis değil, onun üzerinden başlayan bir yükseltmedir; bu yüzden 80 ve 443 dışında bir port açmaya da gerek kalmaz.
Adresler ws:// ya da wss:// ile yazılır. wss://, HTTPS’in WebSocket karşılığıdır ve TLS ile şifrelenir; ws:// şifresizdir. Şifreli bir sayfadan şifresiz bir bağlantı açılamadığı için HTTPS üzerinden ws:// yalnızca kendi makinendeki adreslerde çalışır, uzak sunucularda wss:// gerekir.
Tipik kullanım yerleri:
Her canlı veri işi WebSocket gerektirmez. Veri yalnızca sunucudan istemciye akıyorsa Server-Sent Events daha basittir: sıradan bir HTTP yanıtıdır, kendiliğinden yeniden bağlanır ve vekil sunucularla daha az sorun çıkarır. WebSocket’in kazandığı yer, istemcinin de sürekli ve düşük gecikmeyle konuşması gereken durumlardır.
Test edeceğin uç noktayı wss:// ile, kendi makinendeki bir sunucuyu ws://localhost:PORT biçiminde gir. Sunucu bir alt protokol bekliyorsa yandaki kutuya yaz; birden fazlasını virgülle ayırabilirsin.
Bağlan’a bastığında bağlantıyı senin tarayıcın kurar. Adres HTTPS bir sayfadan erişilemeyecek bir ws:// adresiyse araç bunu bağlanmayı denemeden söyler, böylece tarayıcının engellediği bir isteği sunucu hatası sanmazsın.
Metni ya da JSON’u yaz ve gönder; istersen önce JSON olarak biçimlendir. Giden ve gelen her çerçeve zaman damgası, boyut ve tür bilgisiyle listelenir; ikili çerçeveler onaltılık özet olarak görünür.
Bağlantı düştüğünde kapanış kodu ve anlamı yazılır: 1000 normal kapanış, 1006 ağ kaynaklı anormal kopma, 1011 sunucu hatası. Yankı sunucularında gidiş-dönüş süresini de ölçebilir, kaydın tamamını JSON olarak indirebilirsin.
Bu sayfa HTTPS üzerinden geliyor. Tarayıcılar şifreli bir sayfadan şifresiz bir bağlantı açılmasına izin vermez; buna karışık içerik (mixed content) denir. Kural WebSocket için de geçerlidir: HTTPS bir sayfadan uzak bir sunucuya ws:// ile bağlanmaya kalkarsan istek daha ağa çıkmadan tarayıcı tarafından iptal edilir. Sunucunda hiçbir sorun olmasa bile.
Tek istisna geri döngü adresleridir. localhost ve 127.0.0.1 tarayıcılar tarafından güvenilir kabul edilir, çünkü trafik makinenin dışına hiç çıkmaz. Bu yüzden kendi makinende çalışan bir sunucuya ws://localhost:8080 ile bağlanmak sorunsuz çalışır. Firefox da bu davranışı Chrome ile aynı hizaya getirmiştir.
Yani uzak bir sunucuyu bu sayfadan denemek istiyorsan sunucunun TLS ile yayın yapması ve adresin wss:// olması gerekir. Araç, adresi yazdığın anda bu durumu fark eder ve bağlanmayı denemeden önce uyarır; böylece kendi kodunda olmayan bir hatayı aramazsın.
| Adres | Bu sayfadan sonuç |
|---|---|
wss://example.com/socket |
Çalışır. Şifreli bağlantı, karışık içerik sorunu yok. |
ws://localhost:8080 |
Çalışır. Geri döngü adresleri güvenli kabul edilir. |
ws://127.0.0.1:8080 |
Çalışır. Aynı istisna IPv4 geri döngü adresi için de geçerlidir. |
ws://example.com/socket |
Tarayıcı engeller. Araç bunu bağlanmayı denemeden önce söyler ve wss:// karşılığını önerir. |
Bir WebSocket kapandığında tarayıcı sana bir sayı verir. Bu sayı çoğu zaman sorunun cevabının tamamıdır: 1000 gördüysen aramanı bitirebilirsin, 1006 gördüysen sorun uygulama mantığında değil ağda ya da araya giren bir vekildedir. Araç kapanan her bağlantı için kodu ve anlamını yazar.
| Kod | Anlamı | Ne yapmalı? |
|---|---|---|
1000 |
Normal kapanış | Sorun yok. Taraflardan biri işini bitirdi ve düzgünce kapattı. |
1001 |
Taraf gidiyor | Sekme kapandı ya da sunucu yeniden başlatılıyor. Yeniden bağlanma mantığı burada devreye girmeli. |
1006 |
Anormal kapanış | Kapanış çerçevesi hiç gelmedi. Ağ, güvenlik duvarı, ters vekil zaman aşımı ya da çöken bir süreç ara. Uygulama katmanında iz bırakmaz. |
1008 |
İlke ihlali | Çoğunlukla kimlik doğrulama. Jetonu, başlıkları ve el sıkışmada gönderilen çerezleri kontrol et. |
1009 |
Mesaj çok büyük | Sunucunun çerçeve boyutu sınırını aştın. Mesajı böl ya da sınırı yükselt. |
1011 |
Sunucu hatası | Hata sunucu tarafında. Sunucu günlüklerine bak; istemcide değiştireceğin bir şey yok. |
4000-4999 |
Uygulamaya özel | Anlamını bağlandığın servis belirler; belgelerinde yazar. Kendi protokolünde bu aralığı kullanabilirsin. |
Arada vekil sunucu yok. Adres, alt protokol ve mesajlar Coderspace’e hiç gitmez; yalnızca senin sekmenle karşı sunucu arasında akar.
HTTPS sayfada uzak bir ws:// adresi yazdığında bağlanmayı denemeden uyarır. Böylece tarayıcının engellediği bir bağlantıyı sunucu hatası sanmazsın.
Bağlantı düştüğünde kodu, sunucunun gerekçe metnini ve kodun ne demek olduğunu birlikte yazar.
Her çerçeve yönü, zaman damgası, bayt boyutu ve türüyle listelenir. İkili çerçeveler bozuk metne dönmez, onaltılık özet olarak görünür.
Yankı sunucularında art arda beş ölçüm yapar; en düşük, ortalama ve en yüksek gecikmeyi milisaniye olarak verir.
Bağlantı beklenmedik şekilde koptuğunda aralığı katlayarak yeniden dener. Sunucunun ne zaman geri geldiğini izlemek için yeterli.
Tarayıcılar şifreli bir sayfadan şifresiz bir bağlantı açılmasına izin vermez; buna karışık içerik (mixed content) denir ve kural WebSocket için de geçerlidir. Uzak bir sunucuya ws:// ile bağlanmaya kalkarsan istek daha ağa çıkmadan iptal edilir, sunucunda hiçbir sorun olmasa bile. Tek istisna geri döngü adresleridir: ws://localhost ve ws://127.0.0.1 çalışır, çünkü trafik makinenin dışına çıkmaz. Uzak bir sunucu için adresin wss:// olması gerekir; araç bu durumu bağlanmayı denemeden önce söyler.
1006, kapanış çerçevesinin hiç gelmediği anlamına gelir: bağlantı düzgün kapatılmadı, koptu. Sebep neredeyse her zaman uygulama kodunun dışındadır — ağ kesintisi, güvenlik duvarı, ters vekil (nginx, ALB, Cloudflare) zaman aşımı ya da çöken bir sunucu süreci. Kod sunucudan gelmez, tarayıcı kendi üretir; bu yüzden sunucunun gerekçe metni de olmaz. Boşta kalan bağlantılar için ping/pong ya da uygulama düzeyinde bir canlılık mesajı çoğu 1006 vakasını çözer.
Hayır. Bağlantıyı senin tarayıcın kurar; arada Coderspace tarafında bir vekil ya da aktarıcı yoktur. Yazdığın adres, alt protokol ve gönderdiğin her mesaj yalnızca sekmenle karşı sunucu arasında akar, bize hiç uğramaz ve hiçbir yerde kaydedilmez. Bu yüzden yalnızca senin erişebildiğin bir adrese — örneğin ws://localhost:8080 ya da yerel ağdaki bir sunucuya — bu sayfadan bağlanabilirsin.
Araç, art arda beş kısa metin mesajı gönderir ve her birinin aynen geri gelmesini bekler; ölçtüğü süre gönderimle yanıtın gelişi arasındaki farktır. Dolayısıyla ölçüm yalnızca gönderdiğini geri yollayan yankı (echo) sunucularında anlamlıdır. Kendi protokolün varsa mesajları aynen geri yollamayacağı için sonuç gelmez; bu durumda araç "yanıt gelmedi" der. Ölçüm WebSocket'in kendi ping/pong çerçevelerini kullanmaz, çünkü tarayıcı JavaScript'i bu çerçevelere erişemez.
Sunucun bir alt protokol bekliyorsa onun adını — örneğin graphql-ws, mqtt ya da wamp.2.json. Birden fazla seçeneği virgülle ayırabilirsin; tarayıcı hepsini el sıkışmada sunar ve sunucu birini seçer. Bağlantı kurulduğunda araç sunucunun hangisini seçtiğini yazar. Sunucun alt protokol beklemiyorsa kutuyu boş bırak: gereksiz bir alt protokol göndermek bazı sunucularda el sıkışmanın reddedilmesine yol açar.
İkisi de aynı protokoldür; fark taşıma katmanındadır. ws:// düz TCP üzerinden şifresiz çalışır, wss:// ise TLS üzerinden — yani http ile https arasındaki ilişkinin aynısı. wss:// bağlantısı 443 numaralı porttan geçtiği için vekiller ve güvenlik duvarlarıyla da daha az sorun çıkarır. Yerel geliştirme dışında pratikte tek doğru seçenek wss://'tir; HTTPS bir sayfadan zaten yalnızca o çalışır.