Felhasználók és csoportok kezelése SignalR
SignalR lehetővé teszi az üzenetek küldését az adott felhasználóhoz társított összes kapcsolatra és a névvel ellátott kapcsolatcsoportokra.
Mintakód megtekintése vagy letöltése(letöltés)
Felhasználók a SignalR
A SignalR egyetlen felhasználója több kapcsolattal is rendelkezhet egy alkalmazáshoz. A felhasználók például az asztalukon és a telefonjukon is csatlakoztathatók. Minden eszköz külön SignalR kapcsolattal rendelkezik, de mindegyik ugyanahhoz a felhasználóhoz van társítva. Ha a rendszer üzenetet küld a felhasználónak, az adott felhasználóhoz társított összes kapcsolat megkapja az üzenetet. A kapcsolat felhasználói azonosítója a központ Context.UserIdentifier
tulajdonságával érhető el.
Alapértelmezés szerint a SignalR a kapcsolathoz társított ClaimsPrincipal
ClaimTypes.NameIdentifier
-et használja felhasználói azonosítóként. Ennek a viselkedésnek a testreszabásához lásd: Az identitáskezelés testreszabása jogcímek használatával.
Küldjön üzenetet egy adott felhasználónak úgy, hogy átadja a felhasználói azonosítót a User
függvénynek egy központi metódusban, ahogyan az alábbi példában látható:
Jegyzet
A felhasználói azonosító érzékeny a kis- és nagybetűkre.
public Task SendPrivateMessage(string user, string message)
{
return Clients.User(user).SendAsync("ReceiveMessage", message);
}
Csoportok a SignalR
A csoport egy névvel társított kapcsolatok gyűjteménye. Az üzenetek elküldhetők a csoport összes kapcsolatára. A csoportok ajánlott módja egy kapcsolatnak vagy több kapcsolatnak való küldésnek, mivel a csoportokat az alkalmazás felügyeli. Egy kapcsolat több csoportnak is lehet tagja. A csoportok ideálisak egy csevegőalkalmazáshoz, ahol minden szoba csoportként jeleníthető meg.
Kapcsolatok hozzáadása vagy eltávolítása csoportból
A kapcsolatok a AddToGroupAsync
és RemoveFromGroupAsync
metódusokkal lesznek hozzáadva vagy eltávolítva a csoportokból:
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}.");
}
Biztonságos, ha többször is hozzáad egy felhasználót egy csoporthoz, nem keletkezik kivétel abban az esetben, ha a felhasználó már létezik a csoportban.
A csoporttagság nem marad meg a kapcsolat újracsatlakozásakor. A kapcsolatnak csatlakoznia kell újra a csoporthoz, amikor újra létrejön. Nem lehet megszámolni egy csoport tagjait, mivel ez az információ nem érhető el, ha az alkalmazás több kiszolgálóra van skálázva.
A csoportok a memóriában maradnak, így nem maradnak meg a kiszolgáló újraindítása során. Fontolja meg az Azure SignalR szolgáltatást a csoporttagság megőrzését igénylő forgatókönyvek esetében. További információ: Azure SignalR
A csoportok használata során az erőforrásokhoz való hozzáférés védelméhez használja hitelesítést és engedélyezést funkciót a ASP.NET Core-ban. Ha egy felhasználót csak akkor adnak hozzá egy csoporthoz, ha a hitelesítő adatok érvényesek az adott csoportra, az adott csoportnak küldött üzenetek csak a jogosult felhasználókhoz kerülnek. A csoportok azonban nem biztonsági funkciók. A hitelesítési jogcímek olyan funkciókkal rendelkeznek, amelyeket a csoportok nem használnak, például a lejárat és a visszavonás. Ha egy felhasználó engedélyét visszavonják a csoport elérésére, az alkalmazásnak explicit módon el kell távolítania a felhasználót a csoportból.
Jegyzet
A csoportnevek megkülönböztetik a kis- és nagybetűket.