Mengelola pengguna dan grup di SignalR
Oleh Brennan Conroy
SignalR memungkinkan pesan dikirim ke semua koneksi yang terkait dengan pengguna tertentu dan ke grup koneksi bernama.
Melihat atau mengunduh kode sampel (cara mengunduh)
Pengguna di SignalR
Satu pengguna di SignalR dapat memiliki beberapa koneksi ke aplikasi. Misalnya, pengguna dapat terhubung di desktop serta ponsel mereka. Setiap perangkat memiliki koneksi terpisah SignalR , tetapi semuanya terkait dengan pengguna yang sama. Jika pesan dikirim ke pengguna, semua koneksi yang terkait dengan pengguna tersebut menerima pesan. Pengidentifikasi pengguna untuk koneksi dapat diakses oleh Context.UserIdentifier
properti di hub.
Secara default, SignalR menggunakan ClaimTypes.NameIdentifier
dari yang ClaimsPrincipal
terkait dengan koneksi sebagai pengidentifikasi pengguna. Untuk menyesuaikan perilaku ini, lihat Gunakan klaim untuk menyesuaikan pengelolaan identitas.
Kirim pesan ke pengguna tertentu dengan meneruskan pengidentifikasi pengguna ke User
fungsi dalam metode hub, seperti yang ditunjukkan dalam contoh berikut:
Catatan
Pengidentifikasi pengguna peka huruf besar/kecil.
public Task SendPrivateMessage(string user, string message)
{
return Clients.User(user).SendAsync("ReceiveMessage", message);
}
Grup dalam SignalR
Grup adalah kumpulan koneksi yang terkait dengan nama. Pesan dapat dikirim ke semua koneksi dalam grup. Grup adalah cara yang disarankan untuk mengirim ke koneksi atau beberapa koneksi karena grup dikelola oleh aplikasi. Koneksi dapat menjadi anggota dari beberapa grup. Grup sangat ideal untuk sesuatu seperti aplikasi obrolan, di mana setiap ruangan dapat direpresentasikan sebagai grup.
Menambahkan atau menghapus koneksi dari grup
Koneksi ditambahkan ke atau dihapus dari grup melalui AddToGroupAsync
metode dan 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}.");
}
Aman untuk menambahkan pengguna ke grup beberapa kali, tidak terkecuali jika pengguna sudah ada di grup.
Keanggotaan grup tidak dipertahankan saat koneksi tersambung kembali. Koneksi perlu bergabung kembali dengan grup saat dibuat ulang. Tidak dimungkinkan untuk menghitung anggota grup, karena informasi ini tidak tersedia jika aplikasi diskalakan ke beberapa server.
Grup disimpan dalam memori, sehingga tidak akan bertahan melalui restart server. Pertimbangkan layanan Azure SignalR untuk skenario yang mengharuskan keanggotaan grup dipertahankan. Untuk informasi selengkapnya, lihat Azure SignalR
Untuk melindungi akses ke sumber daya saat menggunakan grup, gunakan fungsionalitas autentikasi dan otorisasi di ASP.NET Core. Jika pengguna ditambahkan ke grup hanya saat kredensial valid untuk grup tersebut, pesan yang dikirim ke grup tersebut hanya akan masuk ke pengguna yang berwenang. Namun, grup bukan fitur keamanan. Klaim autentikasi memiliki fitur yang tidak dimiliki grup, seperti kedaluwarsa dan pencabutan. Jika izin pengguna untuk mengakses grup dicabut, aplikasi harus menghapus pengguna dari grup secara eksplisit.
Catatan
Nama grup peka huruf besar/kecil.
Sumber Daya Tambahan:
ASP.NET Core