Sobes.tech
Middle

Cos'è SignalR?

sobes.tech AI

Risposta dell'AI

SignalR è una libreria per ASP.NET Core che consente di aggiungere funzionalità WebSocket e Long Polling nelle applicazioni web per creare scenari interattivi in tempo reale.

Fornisce comunicazione bidirezionale tra server e client.

I principali scenari di utilizzo:

  • Applicazioni di chat.
  • Giochi online.
  • Aggiornamento dei dati in tempo reale (ad esempio, grafici, notifiche).
  • Monitoraggio dell'attività degli utenti.

Componenti principali:

  • Hub: Classi che gestiscono le chiamate in ingresso dai client e inviano messaggi ai client.
  • Connessioni: Rappresentano le connessioni dei client. Possono essere stabilite tramite WebSocket, Server-Sent Events o Long Polling (a seconda del supporto del client e del server).

Esempio di creazione di un hub:

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

public class MyHub : Hub
{
    // Metodo che può essere chiamato dal client
    public async Task SendMessage(string user, string message)
    {
        // Inviare messaggi a tutti i client connessi
        await Clients.All.SendAsync("ReceiveMessage", user, message);
    }
}

Configurazione in Startup.cs:

// In ConfigureServices
services.AddSignalR();

// In Configure
app.UseRouting();
app.UseEndpoints(endpoints =>
{
    endpoints.MapHub<MyHub>("/myhub"); // Mappatura dell'hub all'URL
});

Sul lato client (JavaScript):

// Opzione con npm
// npm install @microsoft/signalr

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

// Gestione dei messaggi in arrivo dal server
hubConnection.on("ReceiveMessage", (user, message) => {
    // Logica di gestione del messaggio ricevuto
    console.log(`${user}: ${message}`);
});

// Apertura della connessione
hubConnection.start()
    .then(() => console.log("Connessione avviata"))
    .catch(err => console.error(err.toString()));

// Invio di un messaggio al server
// hubConnection.invoke("SendMessage", "Cliente", "Ciao dal client!");

SignalR sceglie automaticamente il trasporto ottimale in base alle capacità del client e del server, iniziando con WebSocket e passando a protocolli più vecchi se non disponibili. Ciò garantisce ampia compatibilità.