Sobes.tech
Middle

Czym jest SignalR?

sobes.tech AI

Odpowiedź od AI

SignalR to biblioteka dla ASP.NET Core, umożliwiająca dodanie funkcji WebSocket i Long Polling do aplikacji internetowych w celu tworzenia interaktywnych scenariuszy w czasie rzeczywistym.

Zapewnia dwukierunkową komunikację między serwerem a klientem.

Główne scenariusze użycia:

  • Aplikacje czatu.
  • Gry online.
  • Aktualizacja danych w czasie rzeczywistym (np. wykresy, powiadomienia).
  • Monitorowanie aktywności użytkowników.

Główne komponenty:

  • Hubs: Klasy obsługujące przychodzące wywołania od klientów i wysyłające wiadomości do klientów.
  • Połączenia: Reprezentują połączenia klientów. Mogą być ustanowione przez WebSocket, Server-Sent Events lub Long Polling (w zależności od obsługi przez klienta i serwer).

Przykład tworzenia hub:

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

public class MyHub : Hub
{
    // Metoda wywoływana przez klienta
    public async Task SendMessage(string user, string message)
    {
        // Wysyłanie wiadomości do wszystkich podłączonych klientów
        await Clients.All.SendAsync("ReceiveMessage", user, message);
    }
}

Konfiguracja w Startup.cs:

// W ConfigureServices
services.AddSignalR();

// W Configure
app.UseRouting();
app.UseEndpoints(endpoints =>
{
    endpoints.MapHub<MyHub>("/myhub"); // Mapowanie hub na URL
});

Po stronie klienta (JavaScript):

// Opcja z npm
// npm install @microsoft/signalr

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

// Obsługa przychodzących wiadomości z serwera
hubConnection.on("ReceiveMessage", (user, message) => {
    // Logika obsługi odebranej wiadomości
    console.log(`${user}: ${message}`);
});

// Otwarcie połączenia
hubConnection.start()
    .then(() => console.log("Połączenie nawiązane"))
    .catch(err => console.error(err.toString()));

// Wysyłanie wiadomości do serwera
// hubConnection.invoke("SendMessage", "Klient", "Witaj od klienta!");

SignalR automatycznie wybiera optymalny transport w zależności od możliwości klienta i serwera, zaczynając od WebSocket i przełączając się na starsze protokoły w razie braku wsparcia. Zapewnia to szeroką kompatybilność.