Megosztás a következőn keresztül:


Felhasználók és csoportok kezelése SignalR

Brennan Conroy

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 ClaimsPrincipalClaimTypes.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.

További erőforrások