Middle
¿Qué es SignalR?
sobes.tech AI
Respuesta de la IA
SignalR es una biblioteca para ASP.NET Core que permite agregar funcionalidad WebSocket y Long Polling en aplicaciones web para crear escenarios interactivos en tiempo real.
Proporciona comunicación bidireccional entre el servidor y el cliente.
Los principales escenarios de uso:
- Aplicaciones de chat.
- Juegos en línea.
- Actualización de datos en tiempo real (por ejemplo, gráficos, notificaciones).
- Monitoreo de actividad de usuarios.
Componentes principales:
- Hubs: Clases que manejan llamadas entrantes de clientes y envían mensajes a los clientes.
- Conexiones: Representan conexiones de clientes. Pueden establecerse mediante WebSocket, Server-Sent Events o Long Polling (según soporte del cliente y del servidor).
Ejemplo de creación de un hub:
// MyHub.cs
using Microsoft.AspNetCore.SignalR;
using System.Threading.Tasks;
public class MyHub : Hub
{
// Método que puede ser llamado por el cliente
public async Task SendMessage(string user, string message)
{
// Enviar mensaje a todos los clientes conectados
await Clients.All.SendAsync("ReceiveMessage", user, message);
}
}
Configuración en Startup.cs:
// En ConfigureServices
services.AddSignalR();
// En Configure
app.UseRouting();
app.UseEndpoints(endpoints =>
{
endpoints.MapHub<MyHub>("/myhub"); // Mapeo del hub a la URL
});
En el lado del cliente (JavaScript):
// Opción con npm
// npm install @microsoft/signalr
const hubConnection = new signalR.HubConnectionBuilder()
.withUrl("/myhub") // URL del hub
.build();
// Manejar mensajes entrantes del servidor
hubConnection.on("ReceiveMessage", (user, message) => {
// Lógica para procesar el mensaje recibido
console.log(`${user}: ${message}`);
});
// Abrir conexión
hubConnection.start()
.then(() => console.log("Conexión iniciada"))
.catch(err => console.error(err.toString()));
// Enviar mensaje al servidor
// hubConnection.invoke("SendMessage", "Cliente", "¡Hola desde el cliente!");
SignalR selecciona automáticamente el transporte óptimo según las capacidades del cliente y del servidor, comenzando con WebSocket y cambiando a protocolos más antiguos si no están disponibles. Esto garantiza una amplia compatibilidad.