Sobes.tech
Middle

Wat is SignalR?

sobes.tech AI

Antwoord van AI

SignalR is een bibliotheek voor ASP.NET Core waarmee WebSocket- en Long Polling-functionaliteit kunnen worden toegevoegd aan webapplicaties om interactieve scenario's in realtime te creëren.

Het biedt tweerichtingscommunicatie tussen server en client.

Belangrijkste gebruiksscenario's:

  • Chat-applicaties.
  • Online games.
  • Real-time gegevensupdates (bijvoorbeeld grafieken, meldingen).
  • Activiteit monitoring van gebruikers.

Belangrijkste componenten:

  • Hubs: Klassen die inkomende oproepen van clients verwerken en berichten naar clients sturen.
  • Verbindingen: Vertegenwoordigen client-verbindingen. Ze kunnen worden opgezet via WebSocket, Server-Sent Events of Long Polling (afhankelijk van ondersteuning door client en server).

Voorbeeld van het maken van een hub:

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

public class MyHub : Hub
{
    // Methode die door de client kan worden aangeroepen
    public async Task SendMessage(string user, string message)
    {
        // Bericht sturen naar alle verbonden clients
        await Clients.All.SendAsync("ReceiveMessage", user, message);
    }
}

Configuratie in Startup.cs:

// In ConfigureServices
services.AddSignalR();

// In Configure
app.UseRouting();
app.UseEndpoints(endpoints =>
{
    endpoints.MapHub<MyHub>("/myhub"); // Mapping van de hub naar URL
});

Aan de clientzijde (JavaScript):

// Optie met npm
// npm install @microsoft/signalr

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

// Verwerking van inkomende berichten van de server
hubConnection.on("ReceiveMessage", (user, message) => {
    // Logica voor het verwerken van het ontvangen bericht
    console.log(`${user}: ${message}`);
});

// Verbinding openen
hubConnection.start()
    .then(() => console.log("Verbinding gestart"))
    .catch(err => console.error(err.toString()));

// Bericht naar de server sturen
// hubConnection.invoke("SendMessage", "Client", "Hallo van de client!");

SignalR kiest automatisch het optimale transport op basis van de mogelijkheden van de client en de server, beginnend met WebSocket en overschakelend op oudere protocollen indien nodig. Dit zorgt voor brede compatibiliteit.