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 Nedir?
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;
- Server'dan sürekli olarak güncellenen: Oyun, Sosyal Medlya Mecraları, Oylama/Seçim, Haritalar ve GPS vb.
- Dijital Pano ve izleme uygulamaları: Şirket Panoları, Anlık Satış İstatistikleri veya Sohbet Odaları.
- Bildirim Gerektiren: Sosyal Medya Mecraları, E-Posta, Sohbet, Oyun, Seyahat Uyarıları vb. diğer birçok alanda 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;
- Bağlantı yönetimi otomatik olarak işler.
- Tüm bağlı client'lar aynı anda ileti gönderir. Misalen sohbet odaları.
- İletileri belirli kullanıcılara veya kullanıcı gruplarına gönderir.
- Artan trafiği işlemek için ölçeklendirir.
- SignalR Hub Protokolü.
SignalR'da Kullanılan Temel Kavramlar
Taşımalar
SignalR Runtime olarak iletişimi işlemek için 3( üç ) tür teknik/aktarım destekler, sırasıyla;
- WebSocket,
- Server taraflı gönderilen olaylar,
- Uzun Yoklama
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.
Merkezler
SignalR, Cilent ve Server arasındaki iletişimi kurmak için Hubları kullanır. Bazılarını kısaca izah etmek gerekirse;
Server ( Sunucu)
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.
Hub
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.
Protokoller
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:
- Varsayılan olan JSON'ı temel alan bir metin protokolü.
- Genellikle JSON'dan daha küçük iletiler oluşturan MessagePack'i temel alan ikili protokol.
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.
Cilents ( Kullanıcılar )
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.
Gruplar
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.
Connections ( Bağlantılar )
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.
Customers ( Müşteriler )
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;
- .Net İstemcisi: Microosft.AspNetCore.SignalR.Client.HubConnection
- JavaScript İstemcisi: @microsoft/signalr.HubConnection
- Java İstemcisi: com.microsoft.signalr.HubConnection
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.
Kaynak: Hasan BOZKUŞ
Yorumlar
Ad: Burak Temelkaya
Başlık: Çok iyi bir yazı olmuş.
SignalR'a giriş için çok iyi bir yazı olmuş.
12.02.2024
Bir Yorum Bırak