Sobes.tech
Middle

Co je SignalR?

sobes.tech AI

Odpověď od AI

SignalR je knihovna pro ASP.NET Core, která umožňuje přidat funkce WebSocket a Long Polling do webových aplikací pro vytváření interaktivních scénářů v reálném čase.

Zajišťuje obousměrnou komunikaci mezi serverem a klientem.

Hlavní scénáře použití:

  • Chatové aplikace.
  • Online hry.
  • Aktualizace dat v reálném čase (například grafy, oznámení).
  • Monitoring aktivity uživatelů.

Hlavní komponenty:

  • Huby: Třídy, které zpracovávají příchozí volání od klientů a odesílají zprávy klientům.
  • Připojení: Představují připojení klientů. Mohou být navázána přes WebSocket, Server-Sent Events nebo Long Polling (v závislosti na podpoře klienta a serveru).

Příklad vytvoření hubu:

// MyHub.cs
using Microsoft.AspNetCore.SignalR;
using System.Threading.Tasks;

public class MyHub : Hub
{
    // Metoda, kterou může volat klient
    public async Task SendMessage(string user, string message)
    {
        // Odeslání zprávy všem připojeným klientům
        await Clients.All.SendAsync("ReceiveMessage", user, message);
    }
}

Konfigurace v Startup.cs:

// V ConfigureServices
services.AddSignalR();

// V Configure
app.UseRouting();
app.UseEndpoints(endpoints =>
{
    endpoints.MapHub<MyHub>("/myhub"); // Mapování hubu na URL
});

Na straně klienta (JavaScript):

// Varianta s npm
// npm install @microsoft/signalr

const hubConnection = new signalR.HubConnectionBuilder()
    .withUrl("/myhub") // URL hubu
    .build();

// Zpracování příchozích zpráv ze serveru
hubConnection.on("ReceiveMessage", (user, message) => {
    // Logika zpracování přijaté zprávy
    console.log(`${user}: ${message}`);
});

// Otevření spojení
hubConnection.start()
    .then(() => console.log("Spojení navázáno"))
    .catch(err => console.error(err.toString()));

// Odeslání zprávy na server
// hubConnection.invoke("SendMessage", "Klient", "Ahoj od klienta!");

SignalR automaticky vybírá optimální přenosový protokol v závislosti na schopnostech klienta a serveru, začíná WebSocketem a přepíná na starší protokoly, pokud jsou nedostupné. To zajišťuje širokou kompatibilitu.