Middle
Čo je SignalR?
sobes.tech AI
Odpoveď od AI
SignalR je knižnica pre ASP.NET Core, ktorá umožňuje pridávať funkcie WebSocket a Long Polling do webových aplikácií na vytváranie interaktívnych scénarov v reálnom čase.
Zabezpečuje obojsmernú komunikáciu medzi serverom a klientom.
Hlavné scenáre použitia:
- Články chatu.
- Online hry.
- Aktualizácia dát v reálnom čase (napríklad grafy, upozornenia).
- Monitorovanie aktivity používateľov.
Hlavné komponenty:
- Huby (Hubs): Triedy, ktoré spracúvajú prichádzajúce volania od klientov a odosielajú správy klientom.
- Pripojenia (Connections): Predstavujú klientske pripojenia. Môžu byť nadviazané cez WebSocket, Server-Sent Events alebo Long Polling (v závislosti od podpory klienta a servera).
Príklad vytvorenia hubu:
// MyHub.cs
using Microsoft.AspNetCore.SignalR;
using System.Threading.Tasks;
public class MyHub : Hub
{
// Metóda, ktorú môže volať klient
public async Task SendMessage(string user, string message)
{
// Odoslanie správy všetkým pripojeným klientom
await Clients.All.SendAsync("ReceiveMessage", user, message);
}
}
Konfigurácia v Startup.cs:
// In ConfigureServices
services.AddSignalR();
// In Configure
app.UseRouting();
app.UseEndpoints(endpoints =>
{
endpoints.MapHub<MyHub>("/myhub"); // Mapovanie hubu na URL
});
Na strane klienta (JavaScript):
// Varianta s npm
// npm install @microsoft/signalr
const hubConnection = new signalR.HubConnectionBuilder()
.withUrl("/myhub") // URL hubu
.build();
// Spracovanie prichádzajúcich správ zo servera
hubConnection.on("ReceiveMessage", (user, message) => {
// Logika spracovania prijatej správy
console.log(`${user}: ${message}`);
});
// Otvorenie spojenia
hubConnection.start()
.then(() => console.log("Pripojenie začalo"))
.catch(err => console.error(err.toString()));
// Odoslanie správy na server
// hubConnection.invoke("SendMessage", "Klient", "Ahoj od klienta!");
SignalR automaticky vyberá optimálny transport v závislosti od možností klienta a servera, začínajúc WebSocket a prepínajúc na staršie protokoly v prípade ich neprítomnosti. To zabezpečuje širokú kompatibilitu.