'da kullanıcıları ve grupları yönetme SignalR

Tarafından Brennan Conroy

SignalR iletilerin belirli bir kullanıcıyla ilişkili tüm bağlantılara ve adlandırılmış bağlantı gruplarına gönderilmesine izin verir.

Örnek kodu görüntüleme veya indirme (indirme)

uygulamasındaki kullanıcılar SignalR

içindeki SignalR tek bir kullanıcının bir uygulamaya birden çok bağlantısı olabilir. Örneğin, bir kullanıcı hem masaüstünde hem de telefonunda bağlanabilir. Her cihazın ayrı SignalR bir bağlantısı vardır, ancak hepsi aynı kullanıcıyla ilişkilendirilmiştir. 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ıya hub'daki özelliği tarafından Context.UserIdentifier erişilebilir.

Varsayılan olarak, SignalR kullanıcı tanımlayıcısı olarak bağlantıyla ilişkilendirilmiş olan öğesini ClaimsPrincipal kullanırClaimTypes.NameIdentifier. Bu davranışı özelleştirmek için bkz. İşlemeyi özelleştirmek identity için talepleri kullanma.

Aşağıdaki örnekte gösterildiği gibi kullanıcı tanımlayıcısını hub yöntemindeki işleve User geçirerek belirli bir kullanıcıya ileti gönderin:

Not

Kullanıcı tanımlayıcısı büyük/küçük harfe duyarlıdır.

public Task SendPrivateMessage(string user, string message)
{
    return Clients.User(user).SendAsync("ReceiveMessage", message);
}

içindeki gruplar SignalR

Grup, bir adla ilişkilendirilmiş bağlantı koleksiyonudur. İletiler bir gruptaki tüm bağlantılara gönderilebilir. Gruplar uygulama tarafından yönetildiğinden, gruplar bir bağlantıya veya birden çok bağlantıya göndermenin önerilen yoludur. Bağlantı birden çok grubun üyesi olabilir. Gruplar, her odanın grup olarak temsil edilebileceği sohbet uygulaması gibi bir şey için idealdir.

Gruptan bağlantı ekleme veya gruptan bağlantı kaldırma

Ve yöntemleri aracılığıyla AddToGroupAsync RemoveFromGroupAsync gruplara bağlantılar eklenir veya 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}.");
}

Bir kullanıcıyı bir gruba birden çok kez eklemek güvenlidir; kullanıcının grupta zaten var olması durumunda özel durum oluşturmaz.

Bağlantı yeniden bağlandığında grup üyeliği korunmaz. Yeniden kurulduğunda bağlantının gruba yeniden katılması gerekir. Uygulama birden çok sunucuya ölçeklendirildiyse bu bilgiler kullanılamadığından grubun üyelerini saymak mümkün değildir.

Gruplar bellekte tutulur, bu nedenle sunucu yeniden başlatma işleminde kalıcı olmazlar. Grup üyeliğinin kalıcı olmasını gerektiren senaryolar için Azure SignalR hizmetini göz önünde bulundurun. Daha fazla bilgi için bkz. Azure SignalR

Grupları kullanırken kaynaklara erişimi korumak için ASP.NET Core'da kimlik doğrulama ve yetkilendirme işlevlerini kullanın. 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 kullanmaması gereken süre sonu ve iptal gibi özelliklere sahiptir. Bir 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/küçük harfe duyarlıdır.

Ek kaynaklar