O que é SignalR e para que serve?
\n\nSignalR é uma biblioteca para ASP.NET Core que simplifica a adição de funcionalidades em tempo real (real-time) em aplicações web. Ela permite que o servidor envie dados instantaneamente para clientes conectados (navegadores, aplicativos móveis, aplicativos desktop) sem a necessidade de requisições constantes do cliente.
\n\nPara que serve? O protocolo HTTP tradicional funciona no princípio de "requisição-resposta": o cliente envia uma requisição, o servidor responde. Para receber atualizações, o cliente precisa consultar o servidor constantemente (polling). Isso é ineficiente e causa atrasos. O SignalR resolve esse problema fornecendo uma conexão bidirecional permanente.
\n\nPrincipais cenários de uso:
\n- \n
- Chats e mensageiros (entrega instantânea de mensagens) \n
- Painéis de monitoramento e dashboards (atualização de taxas de câmbio, cotações de ações) \n
- Edição colaborativa de documentos (estilo Google Docs) \n
- Notificações em tempo real (novos pedidos, alertas) \n
- Jogos multijogador \n
- Progresso de execução de operações longas (upload de arquivos, processamento de dados) \n
O SignalR escolhe automaticamente o melhor protocolo de transporte para a conexão:
\n- \n
- WebSocket — o mais eficiente, conexão bidirecional permanente \n
- Server-Sent Events (SSE) — transmissão unidirecional do servidor para o cliente \n
- Long Polling — mecanismo de fallback, caso WebSocket e SSE não estejam disponíveis \n
Instalação do SignalR
\n\nInstalação no servidor (ASP.NET Core)
\nPara a parte do servidor, utiliza-se o pacote NuGet. Execute no terminal:
\ndotnet add package Microsoft.AspNetCore.SignalR\nOu através do Package Manager Console no Visual Studio:
\nInstall-Package Microsoft.AspNetCore.SignalR\n\nInstalação do cliente para JavaScript (navegador)
\nPara a parte do cliente (navegador), utilize npm:
\nnpm install @microsoft/signalr\nOu inclua via CDN:
\n<script src="https://cdnjs.cloudflare.com/ajax/libs/microsoft-signalr/8.0.0/signalr.min.js"></script>\n\nInstalação do cliente para .NET (C#)
\nPara o cliente em C# (por exemplo, aplicação console ou WPF):
\ndotnet add package Microsoft.AspNetCore.SignalR.Client\n\nInício rápido: exemplo "Hello, World!"
\n\nVamos criar um chat simples: o servidor recebe uma mensagem e a distribui para todos os clientes conectados.
\n\nPasso 1: Criando um Hub (parte do servidor)
\nCrie o arquivo ChatHub.cs:
using Microsoft.AspNetCore.SignalR;\n\nnamespace SignalRChat.Hubs\n{\n public class ChatHub : Hub\n {\n public async Task SendMessage(string user, string message)\n {\n // Envia a mensagem para todos os clientes conectados\n await Clients.All.SendAsync("ReceiveMessage", user, message);\n }\n }\n}\n\n\nPasso 2: Registrando o SignalR no Program.cs
\nusing SignalRChat.Hubs;\n\nvar builder = WebApplication.CreateBuilder(args);\n\n// Adiciona o SignalR\nbuilder.Services.AddSignalR();\n\nvar app = builder.Build();\n\napp.MapGet("/", () => "Hello World!");\n\n// Mapeia o hub para o caminho /chatHub\napp.MapHub<ChatHub>("/chatHub");\n\napp.Run();\n\n\nPasso 3: Criando o cliente (HTML + JavaScript)
\n<!DOCTYPE html>\n<html>\n<head>\n <title>SignalR Chat</title>\n</head>\n<body>\n <h2>SignalR Chat</h2>\n <div>\n <input type="text" id="userInput" placeholder="Seu nome" />\n <input type="text" id="messageInput" placeholder="Mensagem" />\n <button onclick="sendMessage()">Enviar</button>\n </div>\n