Merhaba,
SignalR Hub sınıfları, client ile server arasında eşzamanlı etkileşimi kurabilmek ve server’a bağlı olan client’lar arasında isteğe özel farklı davranışlar sergileyebilmek için Caller, All ve Others özelliklerini içermektedir. Bu içeriğimizde, bu özelliklerin davranışlarını detaylarıyla inceleyecek ve ardından genel olarak kullanılan metotları değerlendireceğiz.
Client Türleri
Davranışa göre client türleri yukarıda da bahsedildiği gibi Caller, All ve Others olmak üzere üçe ayrılır;
İlgili propertylerin davranışlarını sergilemek için aşağıdaki görselleri inceleyebilirsiniz…
| Caller | All | Others |
|---|---|---|
İleti Gönderim Metodu(SendAsync)
İleti gönderim metodu yukarıdaki Caller, All ve Others özelliklerinden kullanılanın davranışlarına göre şekillenmekle birlikte sade ve sadece ‘SendAsync’den ibarettir.
SendAsync aşağıdaki varyasyonlar eşliğinde kullanılır;
await Clients.Caller.SendAsync("receiveMessage", message);
Sadece ilgili Hub’a ileti gönderene ileti gönderir.await Clients.All.SendAsync("receiveMessage", message);
Hub’a bağlı tüm client’lara ileti gönderir.await Clients.Others.SendAsync("receiveMessage", message);
Hub’a ileti gönderen dışındaki tüm client’lara ileti gönderir.
Hub Clients Metotları
Hub üzerinden etkileşime geçilecek olan client’lar ile özelleştirilmiş davranışlar sergileyebilmek için kullanılan metotlardır.
- AllExcept
Belirtilen client’lar hariç server’a bağlı tüm client’lara bildiride bulunur.public class MyHub : Hub { public async Task AllExceptSendMessage(string[] excludedClients, string message) { await Clients.AllExcept(excludedClients).SendAsync("receiveMessage", message); } } - Client
Server’a bağlı olan client’lar arasından sadece belirli bir client’a bildiride bulunur.public class MyHub : Hub { public async Task ClientSendMessage(string connectionId, string message) { await Clients.Client(connectionId).SendAsync("receiveMessage", message); } } - Clients
Server’a bağlı olan client’lar arasından sadece belirtilenlere bildiride bulunur.public class MyHub : Hub { public async Task ClientsSendMessage(string[] clients, string message) { await Clients.Clients(clients).SendAsync("receiveMessage", message); } } - Group
Belirtilen gruptaki tüm client’lara bildiride bulunur.public class MyHub : Hub { public async Task AddToGroup(string groupName) { await Groups.AddToGroupAsync(Context.ConnectionId, groupName); } public async Task GroupSendMessage(string groupName, string message) { await Clients.Group(groupName).SendAsync("receiveMessage", message); } } - GroupExcept
Belirtilen grupta, belirtilen client’lar dışındaki tüm client’lara bildiride bulunur.public class MyHub : Hub { public async Task AddToGroup(string groupName) { await Groups.AddToGroupAsync(Context.ConnectionId, groupName); } public async Task GroupExceptSendMessage(string groupName, string[] excludedClients, string message) { await Clients.GroupExcept(groupName, excludedClients).SendAsync("receiveMessage", message); } }Not: Tüm metotlara dair UI ve Server olmak üzere ikili örneklendirmeleri makalenin en sonundaki örnek proje(leri) indirerek inceleyebilirsiniz. Bunlardan en kapsamlısı GroupExcept için yapılan örneklendirmedir. Özellikle incelemenizi tavsiye ederim.
- Groups
Birden çok gruptaki client’lara bildiride bulunur.public class MyHub : Hub { public async Task GroupsSendMessage(string[] groupNames, string message) { await Clients.Groups(groupNames).SendAsync("receiveMessage", message); } public async Task GetGroupsClients(string[] groupsName) { List<string> datas = new List<string>(); foreach (var groupName in groupsName) { datas.AddRange(groupClients.Where(g => g.GroupName == groupName).Select(c => c.ConnectionId).ToList()); } await Clients.Caller.SendAsync("getGroupClients", datas); } } - OthersInGroup
Bildiride bulunan client haricinde gruptaki tüm client’lara bildiride bulunur.public class MyHub : Hub { public async Task OthersInGroupSendMessage(string groupName, string message) { await Clients.OthersInGroup(groupName).SendAsync("receiveMessage", message); } } - User
Authentication olan kullanıcıyla ilişkili tüm client’lara bildiride bulunur. - Users
Authentication olan kullanıcılarla ilişkili tüm client’lara bildiride bulunur.
‘User’ ve ‘Users’ metotlarını ileride SignalR ile Authentication ve Authorization konularını ele alırken inceleyeceğiz.
İlgilenenlerin faydalanması dileğiyle…
Sonraki yazılarımızda görüşmek üzere…
İyi çalışmalar…
Not: Örnek projeleri indirmek için aşağıdaki linklere tıklayınız.
- (Client)SignalRAllExceptExampleUI
- (Client)SignalRClientExampleUI
- (Client)SignalRClientsExampleUI
- (Client)SignalRExampleUI
- (Client)SignalRGroupExampleUI
- (Client)SignalRGroupExceptExampleUI
- (Client)SignalRGroupsExampleUI
- (Client)SignalROthersInGroupExampleUI
- (Server)SignalRClientTypes
