Middle
Ce este SignalR?
sobes.tech AI
Răspuns de la AI
SignalR este o bibliotecă pentru ASP.NET Core care permite adăugarea funcționalităților WebSocket și Long Polling în aplicațiile web pentru crearea scenariilor interactive în timp real.
Asigură comunicare bidirecțională între server și client.
Principalele scenarii de utilizare:
- Aplicații de chat.
- Jocuri online.
- Actualizarea datelor în timp real (de exemplu, grafice, notificări).
- Monitorizarea activității utilizatorilor.
Componente principale:
- Hub-uri: Clase care gestionează apelurile inbound de la clienți și trimit mesaje către clienți.
- Conexiuni: Reprezintă conexiunile clienților. Pot fi stabilite prin WebSocket, Server-Sent Events sau Long Polling (în funcție de suportul clientului și al serverului).
Exemplu de creare a unui hub:
// MyHub.cs
using Microsoft.AspNetCore.SignalR;
using System.Threading.Tasks;
public class MyHub : Hub
{
// Metodă care poate fi apelată de client
public async Task SendMessage(string user, string message)
{
// Trimiterea mesajului către toți clienții conectați
await Clients.All.SendAsync("ReceiveMessage", user, message);
}
}
Configurare în Startup.cs:
// În ConfigureServices
services.AddSignalR();
// În Configure
app.UseRouting();
app.UseEndpoints(endpoints =>
{
endpoints.MapHub<MyHub>("/myhub"); // Maparea hub-ului la URL
});
Pe partea clientului (JavaScript):
// Varianta cu npm
// npm install @microsoft/signalr
const hubConnection = new signalR.HubConnectionBuilder()
.withUrl("/myhub") // URL-ul hub-ului
.build();
// Procesarea mesajelor inbound de la server
hubConnection.on("ReceiveMessage", (user, message) => {
// Logica de procesare a mesajului primit
console.log(`${user}: ${message}`);
});
// Deschiderea conexiunii
hubConnection.start()
.then(() => console.log("Conexiune începută"))
.catch(err => console.error(err.toString()));
// Trimiterea mesajului către server
// hubConnection.invoke("SendMessage", "Client", "Salut din client!");
SignalR selectează automat transportul optim în funcție de capabilitățile clientului și serverului, începând cu WebSocket și trecând la protocoale mai vechi dacă nu sunt disponibile. Acest lucru asigură o compatibilitate largă.