Hantera användare och grupper i SignalR
SignalR tillåter att meddelanden skickas till alla anslutningar som är associerade med en specifik användare och till namngivna grupper av anslutningar.
Visa eller ladda ned exempelkod(ladda ned)
Användare i SignalR
En enskild användare i SignalR kan ha flera anslutningar till en app. En användare kan till exempel vara ansluten på skrivbordet och på sin telefon. Varje enhet har en separat SignalR anslutning, men de är alla associerade med samma användare. Om ett meddelande skickas till användaren får alla anslutningar som är associerade med användaren meddelandet. Användaridentifieraren för en anslutning kan nås av egenskapen Context.UserIdentifier
i hubben.
Som standard använder SignalRClaimTypes.NameIdentifier
från ClaimsPrincipal
som är associerad med anslutningen som användaridentifierare. Information om hur du anpassar det här beteendet finns i Använda anspråk för att anpassa identitetshantering.
Skicka ett meddelande till en specifik användare genom att skicka användaridentifieraren till funktionen User
i en hubbmetod, som du ser i följande exempel:
Notera
Användaridentifieraren är skiftlägeskänslig.
public Task SendPrivateMessage(string user, string message)
{
return Clients.User(user).SendAsync("ReceiveMessage", message);
}
Grupper i SignalR
En grupp är en samling anslutningar som är associerade med ett namn. Meddelanden kan skickas till alla anslutningar i en grupp. Grupper är det rekommenderade sättet att skicka till en anslutning eller flera anslutningar eftersom grupperna hanteras av programmet. En anslutning kan vara medlem i flera grupper. Grupper är idealiska för något som liknar ett chattprogram, där varje rum kan representeras som en grupp.
Lägga till eller ta bort anslutningar från en grupp
Anslutningar läggs till eller tas bort från grupper via metoderna AddToGroupAsync
och RemoveFromGroupAsync
:
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}.");
}
Det är säkert att lägga till en användare i en grupp flera gånger. Inget undantag utlöses om användaren redan finns i gruppen.
Gruppmedlemskap bevaras inte när en anslutning återansluts. Anslutningen måste återansluta till gruppen när den återupprättas. Det går inte att räkna medlemmarna i en grupp, eftersom den här informationen inte är tillgänglig om programmet skalas till flera servrar.
Grupper sparas i minnet, så de sparas inte vid en serveromstart. Överväg Azure SignalR-tjänsten för scenarier som kräver att gruppmedlemskap behålls. Mer information finns i Azure SignalR
Om du vill skydda åtkomsten till resurser när du använder grupper använder du autentisering och auktorisering funktioner i ASP.NET Core. Om en användare bara läggs till i en grupp när autentiseringsuppgifterna är giltiga för den gruppen går meddelanden som skickas till den gruppen endast till behöriga användare. Grupper är dock inte en säkerhetsfunktion. Autentiseringsanspråk har funktioner som grupper inte har, till exempel förfallodatum och återkallande. Om en användares behörighet att komma åt gruppen återkallas måste appen uttryckligen ta bort användaren från gruppen.
Not
Gruppnamn är skiftlägeskänsliga.
Ytterligare resurser
ASP.NET Core