Asp.NET Core – SignalR Serisi #1 – SignalR Nedir? Nasıl Çalışır?
Merhaba,
Bu içeriğimizde Asp.NET Core – SignalR Yazı Serisinin ilk makalesini kaleme alacak ve SignalR’ın ne olduğunu ve nasıl bir çalışma mekanizmasına sahip olduğunu teorik olarak detaylıca inceleyeceğiz.
Herşeyden önce bundan 5 bilemedin 6 yıl önce Asp.NET MVC 5 ve SignalR İle Chat Uygulaması başlıklı makalemde SignalR’ın ne olduğunu hasbel kadar(aslında yeterince) incelemiştik. Bu içeriğimizde ise mevzu bahis bir yazı serisi olduğundan dolayı ilgili konu tekrar teorik temelleriyle ele alınacak ve yer yer referans edilen makaleden alıntılar yapılarak ilerlenecektir. Tabi ki de serinin her bir makalesi nihai olarak olayı bütünsel açıdan ele alıp, görmemizi sağlayacak birer parça görevi göreceğinden dolayı konuya dair şu ana kadar olabilecek en detaylı ve anlaşılır metinsel bir kaynak üretmeyi hedeflemekteyiz.
Velhasıl-ı kelam bu açıklamalardan sonra ilk adımı SignalR’ın ne olduğuna değinerek atabiliriz 🙂
SignalR Nedir?
Normal bir web yazılımı, klasik olarak Client ile Server arasında kullanıcıdan gelen talebe/request karşılık, Server tarafından verilen tepki/cevap/response ilişkisi üzerinden eşzamanlı olarak haberleşmektedir. Lakin bu durum hepimizinde yıllarca deneyimlediği gibi bir bekleme süreci yahut sayfanın gidip gelmesiyle sonuçlanmakta ve böylece kullanıcı açısından zamansal maliyetle birlikte, deneyim açısından günümüze yakışmayan ilkelliğe alamet etmektedir. Şöyle bi düşünürsek eğer; ülke genelinde yapılan seçimin sonuçlarını anlık olarak takip eden bir web yazılımının beslendiği kaynağa gelen verileri dinamik olarak yorumlayıp göstermesi gerekirken, burada güncel verileri görebilmesi için kullanıcıdan sayfayı yenilemesini istemek sizce ne kadar modern bir hizmet olacaktır? Ya da günümüzün imtihanı Covid-19(nam-ı değer Korona Virüs) verilerini yayınladığınız güncel bir web uygulamasının anlık olarak girilen verilerinin grafiksel olarak anında yansıtıldığını tahayyül ederseniz, klasik web yaklaşımının(request/response) bu süreçte ne kadar efektif bir rol üstlenebildiğini söyleyebilirsiniz…
Günümüz ihtiyaçlarını değerlendirirsek eğer klasik web yaklaşımının tek başına pek yeterli olmadığı ve çözüm olarak farklı kütüphanelere ve hatta protokollere ihtiyacımız olduğu ve olunacağı konusunda kaçınılmaz olarak hem fikir olduğumuz kanaatindeyim. Misal, yukarıda söz gelimi verilen örneklerde hayali tasarlanan web uygulamalarının ideal olarak Real Time bir hizmet vermesi yerinde olacak ve bunun için HTTP’den farklı olarak TCP protokolonü benimseyen Websocket altyapılı sistemler yahut kütüphanelerin kullanılması gerekecektir. (WebSocket hakkında daha teferruatlı bilgi edinmek için Websocket Nedir? başlıklı yazıyı inceleyebilirsiniz)
Asp.NET(Core) mimarisi WebSocket programlayabilmek için birçok farklı kütüphane barındırmaktadır. Bunlardan en popüler ve community(topluluk)’si en geniş olanı SignalR’dır.
SignalR, web uygulamalarına Real Time fonksiyonellik kazandıran bir Open Source kütüphanedir.
Nasıl ki; Node.JS‘de Socket.IO yahut Python‘da WebSockets onca kütüphaneye nazaran rüştlerini ispatlamışlarsa, Asp.NET(Core)’de de SignalR kendisini ispatlamıştır.
Peki… SignalR, yapısal olarak nasıldır?
SignalR altında yatan teknoloji esasında WebSocket’tir. WebSocket, client ile server arasında iki yönli iletişimi sağlayan bir protokoldür. Eğer bir yerde protokol kelimesi geçiyorsa orada bir kurallar bütünü var demektir. Protokol, iki farklı sistemin birbiriyle nasıl haberleşeceğini belirleyen kurallar bütünüdür. SignalR, bu kurallar çerçevesinde client ile server’ı haberleştirmekte ve ilişki yönünü sadece client->server’dan alarak server->client olacak şekilde desteklemekte ve RPC(Remote Procedure Call – Uzak Yordam Çağrısı)’yi benimsemektedir.
RPC, server tarafından client’ta bulunan herhangi bir metodun(JS) tetiklenmesini sağlayan bir protokoldür.
Böylece RPC sayesinde uygulamalar server’dan sayfayı yenilemeksizin data transferini sağlamış olacak ve gerçek zamanlı uygulama davranışı sergileyecektirler. Uygulamanın gerçek zamanlı olması client ile server’ın anlık olarak karşılıklı haberleşmesi anlamına gelmektedir.
SignalR geçmişi nasıl seyreder?
Çoğu kütüphaneye nazaran köklü bir geçmişe sahiptir. Microsoft tarafından 2011 yılında geliştirilmiş, 2013 yılında Asp.NET mimarisine entegre edilmiştir. Tabi o yıllardaki tüm browserların WebSocket protokolünü desteklememesi üzerine SignalR’ın kendi altyapısıyla gelerek client ile server arasındaki haberleşmeyi real time olarak gerçekleştirebiliyor olması bir anda popülerliğine ve kullanıcı yoğunluğuna artı olarak yansımıştır. Tabi ki WebSocket destekleyen tarayıcılarda ise ilgili tarayıcının bu desteğini kullanmaktan da geri durmamaktadır.
SignalR; kısa zamanda, az kodla Real Time uygulamalar geliştirmemizi sağlayan bir kütüphanedir.
SignalR Nasıl Çalışır?
SignalR’ın kalbinde ‘Hub’ denilen bir merkezi yapı vardır. ‘Hub’ içerisinde tanımlanan metoda subscribe(abone) olan tüm client’lar ilgili Hub üzerinden iletilen mesajı alacaktır. Yandaki şemada görüldüğü üzere bir client tarafından gönderilen herhangi bir mesaj yahut data uygun mantıkta ilişkisel tüm client’lara gönderilecektir. Ve buradaki bildiriyi Hub yürütecektir.
Tabi ki de sonraki yazılarımızda Hub üzerinden tanımlanmış gruplara yahut tek bir client’a mesaj gönderilebildiğinden bahsedecek ve pratiksel olarak inceleyeceğiz. Şimdilik teorik olarak konunun genel hatlarını çizmiş bulunmaktayız ve burada teorik olarak sanırım noktayı koymalıyız 🙂
Sonraki içeriklerimizde SignalR teknolojisinin hem server hem de client üzerindeki inşa sürelerinin nasıl icra edildiklerini pratik olarak tek tek inceleyeceğiz.
O halde şimdilik görüşmek üzere…
İlgilenenlerin faydalanması dileğiyle…
İyi çalışmalar…
Çok teşekkürler. Teorik güzel bir anlatım arıyordum. Neyse ki buldum 🙂
Emeginiz icin çok teşekkürler. Güzel ve açık bir anlatım olmuş.
Çox təşəkkür edirəm əladər