SelamünAleyküm, bu yazımızda teorik olarak Asp .Net Core'da SignalR'a giriş yapacağız. Bu yazıda teorik olarak SignalR Nedir? sorusuna cevap vereceğiz, sonraki yazımızda nasıl çalıştığıyla ilgili detaylı ve pratik bir inceleme yapacağız.
Asp .Net Core SignalR, projelerimize web işlevselliği eklemeyi kolaylaştıran open source ( açık kaynaklı ) bir kütüphane/kitaplık olarak bahsedebiliriz. Real Time ( Gerçek Zamanlı) web işlevi, server ( sunucu ) taraflı kodun server üzerinde tetikledikleri olayları bağlı istemcilere ( client/kullanıcı ) göndermesini sağlar. SignalR ile Client ─ Server olarak çift yönlü iletişimler için serverla ileti de gönderebilir.
SignalR'ı Nerelerde kullanabiliriz;
Asp .Net Core SignalR, server'dan client'a RPC ( Remote Proceduer Call ─ Uzak Yordam Çağrısı ) oluşturmaya yönelik bir API sağlar. RPC server taraflı .Net Core kodu ile client'lardan işlevleri çağırır. Tabî her bir client SDK'sına sahip farklı desteklere sahip platformlar mevcut. Bu nedenle çağrılan yazılım dili farklılık gösterebilir.
Asp .Net Core'un SignalR'da kullandığı bazı özellikler;
SignalR Runtime olarak iletişimi işlemek için 3( üç ) tür teknik/aktarım destekler, sırasıyla;
Sırasıyla, WebSocket Server taraflı gönderilen olaylar yerine tercih edilir ve Server taraflı gönderilen olaylar Uzun yoklama yerine tercih edilir. Ancak, bu aktarımlarıdan herhangi biri de kullanılabilir. Server ve Client'ın özellikleri içinden en iyi hangisi ise otomatik olarak onu kulanır.
SignalR, Cilent ve Server arasındaki iletişimi kurmak için Hubları kullanır. Bazılarını kısaca izah etmek gerekirse;
SignalR uç noktasını kullanıma çağırmakla sorumludur. Uç nokta bir Hub veya Hub<T> alt class'ına ( sınıfına ) eşler. Server, herhangi ir bulut sağlayıcsı ( Azure vb. ) veya Azure SignalR hizmeti kullanılabilir.
Client ve server arasında iletişim kurmak için bir Hub kullanılır. Hub client/s ile server'ın birbirleri üzerinde yöntemler çağırmasına olanak tanıyan üst düzey işlem hattıdır. Hub'ı tüm bağlı client ile server arasında Middleware ( ara sunucu ) olarak düşünebiliriz.
SignalR Protokolü, herhangi bir ileti tabanlı aktarım üzerinden iki yönlü RPC'ye yönelik bir protokoldür. Bağlantıdaki taraflardan biri diğer taraf üzerindeki yordamları çağırabilir ve yordamlar sıfır veya daha fazla sonuç veya hata döndürebilir. SignalR iki yerleşik hub protokolü sağlar:
MessagePack protokolunu kullanmak için hem sunucunun hem de istemcinin yapılandırmayı kabul edip hem sunucu hem de istemcinin bunu desteklemesi gerekir. BlazorPack adlı üçüncü bir merkez protokolü vardır, ancak yalnızca Blazor-Server uygulamalarıyla kullanılır. Blazor-Server barındırma modeli olmadan kullanılamaz.
Sistemdeki bir client bireysel olarak hareket eder, ancak bir grubun parçasıda olabilir. Tek bir kullanıcı birden çok client uygulamasından bağlanabilir.
Bir grup bir veya daha fazla bağlantıdan oluşur. Sunucu grup oluşturabilir, gruba bağlantı ekleyebilir ve gruptan bağlantıları kaldırabilir. Bir grubun benzersiz tanımlayıcısı olarak davranan belirtilen bir adı vardır. Gruplar, iletileri hedeflemeye yardımcı olmak için bir kapsam belirleme mekanizması görevi görür. Yani, gerçek zamanlı işlevsellik yalnızca adlandırılmış bir grup içindeki kullanıcılara gönderilebilir.
Bir hub bağlantısı, yalnızca sunucu ve istemci tarafından bilinen benzersiz bir tanımlayıcıyla temsil edilir. Hub türü başına tek bir bağlantı vardır. Her istemcinin sunucuyla benzersiz bir bağlantısı vardır. Başka bir ifadeyle, tek bir kullanıcı birden çok istemcide temsil edilebilir, ancak her istemci bağlantısının kendi tanımlayıcısı vardır.
Cilent bir nesne aracılığıyla ( HubConnection ) server'ın uç noktasına bağlantı kurmakla sorumludur. Merkez bağlantısı her hedef platformda temsil edilir;
Hub bağlantısı başarılı olduğunda, iletiler çift yönde de serbestçe ilerler. Cilent hem server'a bildirim iletmekte hem server'dan bildirim almakta serbesttir.
Bu yazımızın sonuna geldik, şimdiye kadar SignalR için detaylıca bir teorik inceleme yaptık ve alt yapımızı hazırlamış olduk. Bir sonraki yazıda SignalR'ın nasıl çalıştığını pratik olarak ele alacağız ilgilenenlerin faydalanması ümidiyle.
Blog Listesi