Sobes.tech
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.