📚 Pré-requisitos Teóricos: este projeto aplica conceitos ensinados no Capítulo 17 — Programação Assíncrona com Async/Await da Especialização em Sistemas com C#. Recomendado revisar antes de iniciar.
v1.0 — ASP.NET Core SignalR, WebSockets, Backplane Redis, Broadcast em Tempo Real
Série Prática C# & .NET 8 — Projeto Especializado
- ➡️ Projeto: 🎯 Dashboard Financeiro em Tempo Real com SignalR & Redis
- Subpasta Canônica:
api-aspnet/
O projeto Dashboard Financeiro em Tempo Real com SignalR & Redis implementa uma infraestrutura de comunicação bidirecional de baixa latência baseada em WebSockets para transmissão de cotações financeiras em tempo real. A arquitetura emprega ASP.NET Core SignalR Hubs fortemente tipados, suporta broadcast para milhares de navegadores e aplicativos clientes simultâneos e utiliza um backplane em Redis para sincronização horizontal entre múltiplos nós de servidores.
Os artefatos em C# / .NET 8, projetos csproj e controladores estão organizados na subpasta canônica api-aspnet/:
catalogo_projetos/sistemas_csharp_04_signalr_realtime/
├── assets/
│ └── arquitetura_csharp_04.svg
├── api-aspnet/
│ ├── Program.cs
│ ├── README.md
│ └── ...
└── index.md
| ID | Persona | Narrativa da Funcionalidade | Critério de Aceitação Principal | Prioridade |
|---|---|---|---|---|
| US-01 | Trader / Usuário | Quero visualizar variações de preço na tela instantaneamente sem precisar recarregar a página | Conexão WebSocket ativa recebendo atualizações com latência < 10 ms. | Alta |
| US-02 | Desenvolvedor Frontend | Quero me inscrever apenas nos canais dos ativos que estou monitorando | Gestão de grupos no SignalR (Groups.AddToGroupAsync(Context.ConnectionId, ativo)). |
Alta |
| US-03 | Arquiteto de Sistemas | Quero escalar a infraestrutura em múltiplos servidores sem perder mensagens | Backplane Redis sincronizando eventos entre todas as réplicas do SignalR. | Alta |
| US-04 | Desenvolvedor Backend | Quero comunicação fortemente tipada entre servidor e clientes | Hub herdando de Hub<ITickerClient> garantindo contratos de métodos. |
Alta |
| US-05 | Engenheiro de SRE | Quero fallback automático para Server-Sent Events ou Long Polling se WebSockets forem bloqueados | Negociação transparente de transporte nativa do SignalR. | Média |
/cotacoesHub.BackgroundService) simulando feed de cotações periódicas.Clients.Group(ativo).ReceberCotacao(cotacao).flowchart TD
Market[(fa:fa-chart-line Feed de Cotações)]
Hub[(fa:fa-tower-broadcast SignalR Hub & Redis)]
Browsers[(fa:fa-mobile Dashboards Conectados)]
subgraph AppSignalR ["🎯 SignalR Real-Time Hub (api-aspnet)"]
UC01["Estabelecer Conexão WebSocket"]
UC02["Entrar em Grupo de Ativo Financeiro"]
UC03["Publicar Nova Cotação no Hub"]
UC04["Distribuir via Redis Backplane"]
UC05["Receber Push de Cotação no Cliente"]
end
Browsers --> UC01
UC01 --> Hub
Browsers --> UC02
UC02 --> Hub
Market --> UC03
UC03 --> Hub
Hub --> UC04
UC04 --> Hub
Hub --> UC05
UC05 --> Browsers
| ID Requisito | História de Usuário | Artefato de Código | Teste de Aceitação |
|---|---|---|---|
| RF-01 | US-01 | api-aspnet/Hubs/ |
Configuração da rota do Hub |
| RF-02 | US-02 | api-aspnet/Hubs/ |
Métodos de agrupamento de conexões |
| RF-03 | US-01 | api-aspnet/ |
Serviço background de cotações |
| RF-04 | US-04 | api-aspnet/Hubs/ |
Broadcast tipado para grupos |
| RF-05 | US-03, US-05 | api-aspnet/ |
Configuração de backplane e transportes |
📄 api-aspnet/Hubs/FinanceiroHub.cs (arquivo real do projeto)
using Microsoft.AspNetCore.SignalR;
public class FinanceiroHub : Hub {
public async Task EnviarAlerta(string ticker, decimal preco) {
await Clients.All.SendAsync("ReceberCotacao", ticker, preco);
}
}
cd catalogo_projetos/sistemas_csharp_04_signalr_realtime/api-aspnet
dotnet run
| Checkpoint | Meta Técnica | Critério de Aceite | Status |
|---|---|---|---|
| CP-01 | Hub SignalR Ativo | Endpoint /cotacoesHub escutando conexões WebSocket |
PASS ✅ |
| CP-02 | Gestão de Grupos | Inscrição e desinscrição de clientes por ticker financeiro | PASS ✅ |
| CP-03 | Broadcast Concorrente | Transmissão eficiente de mensagens em tempo real | PASS ✅ |
| CP-04 | Integração Redis Backplane | Suporte a distribuição em cluster multi-servidor | PASS ✅ |
| CP-05 | Reconexão Automática | Comportamento resiliente sob oscilação de rede validado | PASS ✅ |