Middle
Kas ir SignalR?
sobes.tech AI
Atbilde no AI
SignalR ir bibliotēka ASP.NET Core, kas ļauj pievienot WebSocket un Long Polling funkcionalitāti tīmekļa lietojumprogrammām, lai izveidotu reāllaika interaktīvus scenārijus.
Tā nodrošina abpusēju saziņu starp serveri un klientu.
Galvenie lietošanas scenāriji:
- Čata lietotnes.
- Tiešsaistes spēles.
- Datu atjaunināšana reāllaikā (piemēram, grafiki, paziņojumi).
- Lietotāju aktivitātes uzraudzība.
Galvenās sastāvdaļas:
- Hubs (Hubs): Klases, kas apstrādā ienākošos klientu izsaukumus un sūta ziņojumus klientiem.
- Savienojumi (Connections): Apzīmē klientu savienojumus. Tie var tikt izveidoti, izmantojot WebSocket, Server-Sent Events vai Long Polling (atkarībā no klienta un servera atbalsta).
Piemērs, kā izveidot hubu:
// MyHub.cs
using Microsoft.AspNetCore.SignalR;
using System.Threading.Tasks;
public class MyHub : Hub
{
// Metode, ko var izsaukt klients
public async Task SendMessage(string user, string message)
{
// Ziņojuma sūtīšana visiem pieslēgtajiem klientiem
await Clients.All.SendAsync("ReceiveMessage", user, message);
}
}
Konfigurācija Startup.cs:
// In ConfigureServices
services.AddSignalR();
// In Configure
app.UseRouting();
app.UseEndpoints(endpoints =>
{
endpoints.MapHub<MyHub>("/myhub"); // Huba maršruts URL
});
Klienta pusē (JavaScript):
// Ar npm
// npm install @microsoft/signalr
const hubConnection = new signalR.HubConnectionBuilder()
.withUrl("/myhub") // Huba URL
.build();
// Apstrādāt ienākošās ziņas no servera
hubConnection.on("ReceiveMessage", (user, message) => {
// Ziņojuma apstrādes loģika
console.log(`${user}: ${message}`);
});
// Atvērt savienojumu
hubConnection.start()
.then(() => console.log("Savienojums uzsākts"))
.catch(err => console.error(err.toString()));
// Nosūtīt ziņu uz serveri
// hubConnection.invoke("SendMessage", "Klients", "Sveiki no klienta!");
SignalR automātiski izvēlas optimālo transportu atkarībā no klienta un servera iespējām, sākot ar WebSocket un pārslēdzoties uz vecākiem protokoliem, ja tie nav pieejami. Tas nodrošina plašu saderību.