WebSocket, birçok modern web uygulamasında ayrılmaz bir teknolojidir. Web için kod yazarsanız, muhtemelen bu terimi daha önce duymuşsunuzdur, ancak belki de tam olarak ne olduğundan veya nasıl kullanılacağından emin değilsinizdir. Neyse ki, WebSocket karmaşık bir kavram değildir ve oldukça hızlı bir şekilde temel bir anlayışa sahip olabilirsiniz.
WebSocket Nedir?
WebSocket ne yazık ki ilk bakışta pek mantıklı gelmeyen isimlerden biri. WebSocket aslında bir iletişim protokolü Bu, istemci ve web sunucusu arasında çift yönlü iletişime izin verir.
Daha basit bir ifadeyle, WebSocket, bir istemcinin ve bir sunucunun, her iki tarafın da diğerine herhangi bir zamanda mesaj gönderebileceği bir bağlantı oluşturmasına izin veren bir teknolojidir.
Bu, istemcinin bir istek başlatması gereken ve ancak o zaman sunucunun yanıt gönderebileceği normal bir HTTP bağlantısından farklıdır. Aslında WebSocket, HTTP uyumlu olacak şekilde tasarlanmış HTTP'den tamamen farklı bir iletişim protokolüdür. Bir istemci uygulaması bir WebSocket bağlantısı başlatmak istediğinde,
HTTP yükseltme mekanizması WebSocket protokolüne geçmek için.Bu noktada şöyle düşünebilirsiniz: "Bir protokol sadece bir dizi kuraldır, bunu kodlamak için nasıl kullanabilirsiniz?".
Eksik parça adı verilen bir şeydir. protokol yığını. Esasen, bir protokolü destekleyen cihazlarda, protokolü kullanarak iletişim kuran uygulamalar yazmanıza izin veren yerleşik donanım ve yazılımlar bulunur. Protokol doğrudan herhangi bir şey oluşturmak için kullanılmaz.
WebSocket Neden Oluşturuldu?
WebSocket ihtiyacını göstermek için internette sohbet etmenin arkasındaki mekanizmayı düşünün.
Birisi kendi cihazından sohbet sunucusuna bir mesaj gönderir, ancak siz onu okuyabilmeniz için sunucunun yine de o mesajı cihazınıza göndermesi gerekir. Sunucu HTTP kullanıyorsa, sunucu istekleri başlatamadığı için bu mesajı doğrudan size iletemez.
HTTP ile bu sorunu çözmenin birkaç yolu vardır. Bunun bir yolu, istemcinin sunucuya sürekli olarak güncelleme istekleri göndermesidir ve sunucu, yanıtta sahip olduğu tüm verileri iletecektir. Bu tekniğe yoklama denir ve her isteğe anket denir. İki çeşit yoklama vardır: uzun yoklama ve kısa yoklama.
Uzun yoklama varyantının kullanılması, istemci aygıtın sürekli olarak sunucuya yeni ileti olup olmadığını sorması anlamına gelir. Yeni mesajlar varsa, sunucu mesajları yanıt olarak gönderir. Aksi takdirde, sunucu yanıt vermeyi geciktirecek ve geri gönderilecek verileri olana kadar bağlantıyı açık tutacak ve ardından istemci hemen yeni bir istekte bulunacaktır.
Bu teknik verimsizdir çünkü HTTP bu şekilde kullanılmak üzere tasarlanmamıştır. Küçük ölçekte yeterince çalışır, ancak her HTTP isteği, üstbilgi ve birçok istemci yoklama yaparken sunucuda önemli ölçüde artan bir yük ile sonuçlanır BT.
İşte uzun oylamayı gösteren bir diyagram:
Kısa yoklama varyantı daha da az verimlidir. Kısa yoklamada, sunucu yeni veriler gelene kadar bağlantıyı açık tutmaz, bu da istemcinin sunucuyu sabit, çok kısa aralıklarla yoklamaya devam etmesi gerektiği anlamına gelir.
HTTP'de çift yönlü iletişim için başka bir tekniğe akış denir.
Akışta, ilk istek gönderildikten sonra, sunucu bağlantıyı süresiz olarak açık tutar ve istemciye sürekli kısmi yanıtlar olarak yeni bilgi parçaları gönderir.
Akışı kullanmak, yoklamaya göre daha küçük bir veri ek yükü ve sunucu yükü ile sonuçlanır, çünkü ideal olarak istemci yalnızca bir HTTP isteği yapar. Ne yazık ki, akış belirli koşullar altında sorunlar yaratır çünkü tarayıcılar ve ağ aracıları (vekil sunucular gibi) genellikle kısmi yanıtlar, amaçlanan ayrı mesajlar yerine, büyük bir HTTP yanıtının (normal HTTP davranışıdır) kırık parçaları olarak olmak.
WebSocket bu sorunları çözmek için oluşturuldu. HTTP'den farklı olarak WebSocket, özellikle çift yönlü iletişim için tasarlanmıştır. WebSocket ile, bir bağlantı açıldığında, istemci ve sunucu, yoklama veya akış sorunları olmadan mesajlar gönderebilir.
WebSocket için Kullanım Durumları
WebSocket harika, ancak bu her yerde kullanılması gerektiği anlamına gelmiyor.
WebSocket'i uygulamak, uygulamanıza özellikle sunucu tarafında karmaşıklık katabilir, bu nedenle iyi bir nedeniniz olmadıkça yapılmamalıdır. Bu şu soruyu akla getiriyor: İyi bir sebep neye benziyor?
WebSocket, düşük gecikme süresinde sık çift yönlü iletişimin gerekli olduğu kullanım durumları için idealdir. Başka bir deyişle, WebSocket, sık veya büyük ölçekte iletişim kurması gereken uygulamalar için bir avantaj sağlar. İletişimin gerçek zamanlı olması gerekmiyorsa veya uygulama hiçbir zaman büyük ölçeğe ulaşmayacaksa, o uygulamada kullanım için yoklama veya akış yeterli olabilir.
WebSocket'in tipik kullanımları, sohbet uygulamaları, çevrimiçi çok oyunculu oyunlar, gerçek zamanlı işbirliği ve bildirim yazılımları vb. oluşturmaktır.
İstemci Tarafında WebSocket Nasıl Kullanılır
WebSocket'i sunucu tarafında kullanmak oldukça ilgili olabilir ve süreç dile bağlı olarak büyük ölçüde değişir (örneğin C#, Java, vb.) ve tercih edilen kitaplık olduğundan burada ele almayacağız. Ardından, istemci tarafında WebSocket'in nasıl kullanılacağını kısaca tartışacağız.
Tüm modern tarayıcılar, adı verilen bir web API'si uygular. WebSocket API'si, WebSocket protokolü için tarayıcının protokol yığınıdır. Bu API'yi kullanarak WebSocket'i JavaScript'te kullanabilirsiniz. API, bir WebSocket bağlantısı oluşturduğunuz ve WebSocket sunucusuyla etkileşim kurduğunuz bir WebSocket nesnesi oluşturmanıza olanak tanır.
Bir WebSocket nesnesi oluşturmak için aşağıdaki kod biçimini kullanabilirsiniz:
hadi exampleSocket = yeni WebSocket("wss://www.example.com/socketserver", "kuklaProtokol");
Yapıcının ilk argümanı, bağlantı oluşturmak istediğiniz WebSocket sunucusunun URI'sidir. Her zaman "ws" veya "wss" ile başlayacaktır. İkinci argüman isteğe bağlıdır. Değeri, desteklediğiniz alt protokolleri belirten bir dize veya dize dizisidir.
WebSocket nesnesi, readyState adlı salt okunur bir özelliğe sahiptir. Bu özelliğe erişim, WebSocket bağlantısının geçerli durumunu sağlar. ReadyState'in dört olası değeri vardır: "connecting", "open", "closeing" ve "closed".
Bu kod satırı çalıştığında, tarayıcı belirtilen sunucuya bağlanmayı dener. Bağlantı hemen tamamlanmayacak, bu nedenle exampleSocket'ın readyState'i "bağlanıyor". Bağlantı tamamlanana kadar hiçbir mesaj gönderilemez veya alınamaz, bu noktada readyState değeri "açık" hale gelir.
bu örnekSoket nesnenin bir olay dinleyicisi vardır (bu, DOM olay dinleyicileri) yalnızca bağlantı kurulduktan sonra başka eylemler gerçekleştirmenize izin veren "onopen" olarak adlandırılır. Nesne ayrıca, sunucuya ileti olarak dizeler, Bloblar (ikili veriler) ve ArrayBuffers göndermenize olanak tanıyan bir "gönder" yöntemine sahiptir.
Bunları birlikte kullanan bir örnek:
exampleSocket.onopen = işlev (Etkinlik) {
örnekSocket.send("WebSocket gerçekten harika");
};
API ayrıca, sunucunun gönderdiği mesajlara tepki verebilmeniz için bir yol sağlar. Bu, "onmessage" olay dinleyicisi ile yapılır. İşte bir örnek:
exampleSocket.onmessage = işlev (Etkinlik) {
konsol.kayıt(Etkinlik.veri);
}
Bunun yerine, ayrıca yazabilirsiniz bir ok işlevi:
exampleSocket.onmessage = (olay) => { konsol.log (olay.veri); }
API ayrıca bir kapat() Bağlantıyı kapatma yöntemi. İşte nasıl göründüğü:
örnekSoket.kapat();
WebSocket Verimli Çift Yönlü İletişim Sağlar
WebSocket, çift yönlü bir iletişim protokolüdür. Sunucular ve tarayıcılar, WebSocket kullanarak iletişim kurmak için protokol yığınları uygular. WebSocket, HTTP çift yönlü olacak şekilde tasarlanmadığı için mevcuttur. HTTP ile çift yönlü bağlantılar uygulamak için yöntemler vardır, ancak sorunları vardır.
WebSocket güçlü bir teknolojidir, ancak uygulama mimarisini önemli ölçüde karmaşıklaştırabileceğinden her durumda gerekli değildir. İstemci tarafında WebSocket kullanımı, tarayıcı WebSocket API ile yapılır.