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.