Sobes.tech
Middle

O que é SignalR?

sobes.tech IA

Resposta da IA

O SignalR é uma biblioteca para ASP.NET Core que permite adicionar funcionalidades WebSocket e Long Polling em aplicações web para criar cenários interativos em tempo real.

Proporciona comunicação bidirecional entre o servidor e o cliente.

Principais cenários de uso:

  • Aplicações de chat.
  • Jogos online.
  • Atualização de dados em tempo real (por exemplo, gráficos, notificações).
  • Monitorização da atividade dos utilizadores.

Componentes principais:

  • Hubs: Classes que gerenciam chamadas entrantes dos clientes e enviam mensagens aos clientes.
  • Conexões: Representam ligações de clientes. Podem ser estabelecidas via WebSocket, Server-Sent Events ou Long Polling (dependendo do suporte do cliente e do servidor).

Exemplo de criação de um hub:

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

public class MyHub : Hub
{
    // Método que pode ser chamado pelo cliente
    public async Task SendMessage(string user, string message)
    {
        // Enviar mensagem a todos os clientes conectados
        await Clients.All.SendAsync("ReceiveMessage", user, message);
    }
}

Configuração no Startup.cs:

// Em ConfigureServices
services.AddSignalR();

// Em Configure
app.UseRouting();
app.UseEndpoints(endpoints =>
{
    endpoints.MapHub<MyHub>("/myhub"); // Mapeamento do hub para URL
});

No lado do cliente (JavaScript):

// Opção com npm
// npm install @microsoft/signalr

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

// Processar mensagens recebidas do servidor
hubConnection.on("ReceiveMessage", (user, message) => {
    // Lógica de processamento da mensagem recebida
    console.log(`${user}: ${message}`);
});

// Abrir conexão
hubConnection.start()
    .then(() => console.log("Conexão iniciada"))
    .catch(err => console.error(err.toString()));

// Enviar mensagem ao servidor
// hubConnection.invoke("SendMessage", "Cliente", "Olá do cliente!");

O SignalR seleciona automaticamente o transporte ideal com base nas capacidades do cliente e do servidor, começando com WebSocket e mudando para protocolos mais antigos se necessário. Isso garante ampla compatibilidade.