Sobes.tech
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.