Sobes.tech
Middle

Was ist SignalR?

sobes.tech KI

Antwort von AI

SignalR ist eine Bibliothek für ASP.NET Core, die es ermöglicht, WebSocket- und Long Polling-Funktionalitäten in Webanwendungen hinzuzufügen, um interaktive Szenarien in Echtzeit zu erstellen.

Sie bietet eine bidirektionale Kommunikation zwischen Server und Client.

Hauptanwendungsfälle:

  • Chat-Anwendungen.
  • Online-Spiele.
  • Echtzeit-Datenaktualisierung (z.B. Diagramme, Benachrichtigungen).
  • Überwachung der Benutzeraktivität.

Hauptkomponenten:

  • Hubs: Klassen, die eingehende Aufrufe von Clients verarbeiten und Nachrichten an Clients senden.
  • Verbindungen: Stellen Client-Verbindungen dar. Sie können über WebSocket, Server-Sent Events oder Long Polling hergestellt werden (je nach Unterstützung durch Client und Server).

Beispiel für die Erstellung eines Hubs:

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

public class MyHub : Hub
{
    // Methode, die vom Client aufgerufen werden kann
    public async Task SendMessage(string user, string message)
    {
        // Nachricht an alle verbundenen Clients senden
        await Clients.All.SendAsync("ReceiveMessage", user, message);
    }
}

Konfiguration in Startup.cs:

// In ConfigureServices
services.AddSignalR();

// In Configure
app.UseRouting();
app.UseEndpoints(endpoints =>
{
    endpoints.MapHub<MyHub>("/myhub"); // Mapping des Hubs auf URL
});

Auf der Clientseite (JavaScript):

// Variante mit npm
// npm install @microsoft/signalr

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

// Verarbeitung eingehender Nachrichten vom Server
hubConnection.on("ReceiveMessage", (user, message) => {
    // Logik zur Verarbeitung der empfangenen Nachricht
    console.log(`${user}: ${message}`);
});

// Verbindung öffnen
hubConnection.start()
    .then(() => console.log("Verbindung gestartet"))
    .catch(err => console.error(err.toString()));

// Nachricht an den Server senden
// hubConnection.invoke("SendMessage", "Client", "Hallo vom Client!");

SignalR wählt automatisch den optimalen Transport basierend auf den Fähigkeiten des Clients und Servers, beginnend mit WebSocket und bei Nichtverfügbarkeit auf ältere Protokolle wechselnd. Dies gewährleistet eine breite Kompatibilität.