'de kullanıcıları ve grupları yönetme SignalR
SignalR , iletilerin belirli bir kullanıcıyla ilişkili tüm bağlantılara ve adlandırılmış bağlantı gruplarına gönderilmelerini sağlar.
Örnek kodu görüntüleme veya indirme (indirme)
'daki kullanıcılar SignalR
uygulamasındaki tek bir SignalR kullanıcının bir uygulamaya birden çok bağlantısı olabilir. Örneğin, bir kullanıcı masaüstüne ve telefonuna bağlanabilir. Her cihazın ayrı bir SignalR bağlantısı vardır ancak bunların hepsi aynı kullanıcıyla ilişkilendirildi. Kullanıcıya bir ileti gönderilirse, bu kullanıcıyla ilişkili tüm bağlantılar iletiyi alır. Bir bağlantının kullanıcı tanımlayıcısına hub'daki Context.UserIdentifier özelliği tarafından erişilebilir.
Varsayılan olarak, SignalR kullanıcı ClaimTypes.NameIdentifier tanımlayıcısı olarak ClaimsPrincipal bağlantıyla ilişkili 'den kullanır. Bu davranışı özelleştirmek için bkz. Kimlik işlemeyi özelleştirmek için talepleri kullanma.
Aşağıdaki örnekte gösterildiği gibi, kullanıcı tanımlayıcısını bir hub yönteminde işleve User aktararak belirli bir kullanıcıya ileti gönderin:
Not
Kullanıcı tanımlayıcısı büyük/büyük/büyük harfe duyarlıdır.
public Task SendPrivateMessage(string user, string message)
{
return Clients.User(user).SendAsync("ReceiveMessage", message);
}
Gruplar içinde SignalR
Grup, bir adla ilişkilendirilmiş bağlantıların koleksiyonudur. İletiler bir gruptaki tüm bağlantılara gönderebilirsiniz. Gruplar uygulama tarafından yönetiliyor olduğundan, bir bağlantıya veya birden çok bağlantıya göndermenin önerilen yolu gruplardır. Bağlantı birden çok grubun üyesi olabilir. Gruplar, her odayı grup olarak temsil etmek için ideal olan sohbet uygulamasıdır. Bağlantılar ve yöntemleri aracılığıyla gruplara eklenir veya AddToGroupAsync RemoveFromGroupAsync gruplardan kaldırılır.
public async Task AddToGroup(string groupName)
{
await Groups.AddToGroupAsync(Context.ConnectionId, groupName);
await Clients.Group(groupName).SendAsync("Send", $"{Context.ConnectionId} has joined the group {groupName}.");
}
public async Task RemoveFromGroup(string groupName)
{
await Groups.RemoveFromGroupAsync(Context.ConnectionId, groupName);
await Clients.Group(groupName).SendAsync("Send", $"{Context.ConnectionId} has left the group {groupName}.");
}
Bağlantı yeniden bağlandığında grup üyeliği korunmaz. Bağlantı yeniden kurulurken gruba yeniden katılmalı. Uygulama birden çok sunucuya ölçeklendirildi ise bu bilgiler kullanılabilir durumda olmadığını için bir grubun üyelerini saymak mümkün değildir.
Grupları kullanırken kaynaklara erişimi korumak için kimlik doğrulaması ve yetkilendirme işlevlerini ASP.NET Core. Bir kullanıcı bir gruba yalnızca kimlik bilgileri o grup için geçerli olduğunda eklenirse, o gruba gönderilen iletiler yalnızca yetkili kullanıcılara gider. Ancak, gruplar bir güvenlik özelliği değildir. Kimlik doğrulama talepleri, grupların süre sonu ve iptal gibi özelliklerine sahiptir. Kullanıcının gruba erişim izni iptal edilirse, uygulamanın kullanıcıyı gruptan açıkça kaldırması gerekir.
Not
Grup adları büyük/büyük/büyük harfe duyarlıdır.