Tutorial Completo de SignalR: Crie um Chat em Tempo Real

Aprenda a criar um sistema de chat em tempo real usando SignalR, a biblioteca .NET🚀 Scale Out com Redis: Atenda Milhões de Conexões!🚀 Scale Out com Redis: Atenda Milhões de Conexões!Integre o Redis com SignalR no .NET e distribua mensagens entre servidores, alcançando escalabilidade e alta performance em tempo real. que simplifica a comunicação bidirecional entre servidor e clientes.

🔗 Conteúdo do Artigo 👉 Como o SignalR Funciona? 👉 Configurando o Projeto 👉 Criando o Hub (Canal de Comunicação) 👉 Cliente Web: HTML + JavaScript 👉 Interface do Chat Simples 👉 Executando e Testando 👉 Segurança Básica 👉 Deploy na Nuvem (Azure) 👉 Próximos Passos

🔍 O que é SignalR?🔗

O SignalR🛡️ Segurança em SignalR: Autenticação e Autorização!🛡️ Segurança em SignalR: Autenticação e Autorização!Descubra como implementar JWT e autorização com roles e claims no SignalR, garantindo segurança e controle de acessos em tempo real. é uma biblioteca do ASP.NET Core que facilita a criação de aplicações em tempo real🚀 Scale Out com Redis: Atenda Milhões de Conexões!🚀 Scale Out com Redis: Atenda Milhões de Conexões!Integre o Redis com SignalR no .NET e distribua mensagens entre servidores, alcançando escalabilidade e alta performance em tempo real.. Ele utiliza tecnologias como WebSockets, Server-Sent Events (SSE) e📊 Behavior-Driven Development: Testes que Todo Mundo Entende!📊 Behavior-Driven Development: Testes que Todo Mundo Entende!Descubra como o BDD transforma testes em linguagens acessíveis. Aprenda a usar SpecFlow em C# para criar testes claros, colaborativos e sem ambiguidades. Long Polling para manter uma conexão persistente entre o cliente e o servidor. Isso permite que o servidor envie dados para🔄 Loops em C#: Repita Tarefas sem Enlouquecer (Com for e while!)🔄 Loops em C#: Repita Tarefas sem Enlouquecer (Com for e while!)Descubra como automatizar repetições em C# utilizando loops for e while com exemplos práticos que evitam erros e otimizam seu código. Aprenda mais! os clientes instantaneamente, sem que eles precisem solicitar manualmente.

💡 Por que usar SignalR?

👉 Como o SignalR Funciona?🔗

SignalR🛡️ Segurança em SignalR: Autenticação e Autorização!🛡️ Segurança em SignalR: Autenticação e Autorização!Descubra como implementar JWT e autorização com roles e claims no SignalR, garantindo segurança e controle de acessos em tempo real. é como um walkie-talkie digital:

// Analogia: Hub = Sala de Chat
public class ChatHub : Hub
{
    public async Task SendMessage(string user, string message)
    {
        // Broadcast para TODOS os clientes
        await Clients.All.SendAsync("ReceiveMessage", user, message);
    }
}

👉 Configurando o Projeto🔗

Passo a passo no Visual Studio🛠️ Instalação do Visual Studio: Prepare sua Nave para Decolar!🛠️ Instalação do Visual Studio: Prepare sua Nave para Decolar!Prepare seu ambiente de desenvolvimento com o Visual Studio em uma aventura C#. Este tutorial prático ensina a instalar, configurar e personalizar sua IDE.:

1. Novo projeto🤝 GitHub Básico: Versionamento para Iniciantes!🤝 GitHub Básico: Versionamento para Iniciantes!Descubra como o GitHub facilita colaboração, versionamento e organização de código com este tutorial prático e essencial para desenvolvedores iniciantes.ASP.NET Core🌍 Projeto: API de E-Commerce com ASP.NET Core e SQL Server!🌍 Projeto: API de E-Commerce com ASP.NET Core e SQL Server!Aprenda a construir uma API robusta para e-commerce com ASP.NET Core, EF Core, JWT e Swagger, validando suas habilidades em um projeto prático real. Web App.

2. Adicione o pacote NuGet📦 Crie um Pacote NuGet: Compartilhe seu Código!📦 Crie um Pacote NuGet: Compartilhe seu Código!Aprenda a empacotar, configurar e publicar pacotes NuGet em C# passo a passo, com dicas profissionais e práticas recomendadas para seu projeto.:

dotnet add package Microsoft.AspNetCore.SignalR

3. Registre o SignalR🛡️ Segurança em SignalR: Autenticação e Autorização!🛡️ Segurança em SignalR: Autenticação e Autorização!Descubra como implementar JWT e autorização com roles e claims no SignalR, garantindo segurança e controle de acessos em tempo real. no Program.cs:

builder.Services.AddSignalR();
app.MapHub<ChatHub>("/chatHub");

👉 Criando o Hub🔗

Hub = Central de Mensagens

public class ChatHub : Hub
{
    // Método chamado pelos clientes
    public async Task SendMessage(string user, string message)
    {
        // Envia para todos conectados
        await Clients.All.SendAsync("ReceiveMessage", user, message);
        // Envia para um grupo específico (ex: "DevsDotNet")
        // await Clients.Group("DevsDotNet").SendAsync(...);
    }
    // Gerenciamento de Conexões
    public override async Task OnConnectedAsync()
    {
        await Groups.AddToGroupAsync(Context.ConnectionId, "DevsDotNet");
        await base.OnConnectedAsync();
    }
}

👉 Cliente Web🔗

HTML + JavaScript (client-side):

<script src="https://cdnjs.cloudflare.com/ajax/libs/microsoft-signalr/8.0.0/signalr.min.js"></script>
<script>
    const connection = new signalR.HubConnectionBuilder()
        .withUrl("/chatHub")
        .build();
    // Recebe mensagens do servidor
    connection.on("ReceiveMessage", (user, message) => {
        const li = document.createElement("li");
        li.textContent = `${user}: ${message}`;
        document.getElementById("messagesList").appendChild(li);
    });
    // Inicia conexão
    async function start() {
        try {
            await connection.start();
            console.log("Conectado ao SignalR!");
        } catch (err) {
            console.error(err);
            setTimeout(start, 5000);
        }
    };
    start();
    // Envia mensagem
    document.getElementById("sendButton").addEventListener("click", async () => {
        const user = document.getElementById("userInput").value;
        const message = document.getElementById("messageInput").value;
        await connection.invoke("SendMessage", user, message);
    });
</script>

👉 Interface do Chat🔗

HTML Básico:

<div>
    <input type="text" id="userInput" placeholder="Seu nome" />
    <input type="text" id="messageInput" placeholder="Sua mensagem" />
    <button id="sendButton">Enviar</button>
</div>
<ul id="messagesList"></ul>

Estilização Rápida (CSS):

#messagesList {
    list-style-type: none;
    padding: 0;
}
#messagesList li {
    padding: 8px;
    margin: 5px;
    background: #f0f0f0;
    border-radius: 4px;
}

👉 Executando e Testando🔗

1. Execute🔍 Comandos: Desacople Ações dos Botões!🔍 Comandos: Desacople Ações dos Botões!Aprenda a implementar comandos em C# para desacoplar lógica e interface usando MVVM, com exemplos práticos e dicas para melhor testabilidade e manutenção. o projeto: F5 no Visual Studio🛠️ Instalação do Visual Studio: Prepare sua Nave para Decolar!🛠️ Instalação do Visual Studio: Prepare sua Nave para Decolar!Prepare seu ambiente de desenvolvimento com o Visual Studio em uma aventura C#. Este tutorial prático ensina a instalar, configurar e personalizar sua IDE..

2. Abra múltiplas abas/navegadores.

3. Envie mensagens → todas as abas atualizam em tempo real!

Teste de Stress (local):

# Use o Apache Bench para simular 100 requisições
ab -n 100 -c 10 http://localhost:5000/chatHub

👉 Segurança Básica🔗

1. HTTPS: Ative em Program.cs:

app.UseHttpsRedirection();

2. Autenticação🔑 Autenticação JWT: Proteja sua API com Tokens!🔑 Autenticação JWT: Proteja sua API com Tokens!Descubra como implementar autenticação JWT no ASP.NET Core com exemplos práticos, boas práticas de segurança e dicas para proteger suas APIs de forma eficiente.: Restrinja acesso a usuários logados:

[Authorize]
public class ChatHub : Hub { ... }

3. CORS: Configure políticas restritivas:

builder.Services.AddCors(options =>
    options.AddPolicy("ChatPolicy", policy =>
        policy.WithOrigins("https://seusite.com")));

👉 Deploy na Nuvem🔗

Azure SignalR Service⚡ Azure Functions + SignalR: Serverless em Tempo Real!⚡ Azure Functions + SignalR: Serverless em Tempo Real!Aprenda a criar aplicativos em tempo real usando Azure Functions e SignalR. Desenvolva soluções serverless escaláveis e inovadoras sem complexidade. (Escalabilidade):

1. Crie um recurso📡 RESTful 101: Princípios que Todo Dev API Precisa Saber!📡 RESTful 101: Princípios que Todo Dev API Precisa Saber!Descubra os fundamentos do REST e boas práticas para criar APIs simples, escaláveis e eficientes. Domine métodos HTTP e status codes com exemplos práticos. Azure SignalR Service⚡ Azure Functions + SignalR: Serverless em Tempo Real!⚡ Azure Functions + SignalR: Serverless em Tempo Real!Aprenda a criar aplicativos em tempo real usando Azure Functions e SignalR. Desenvolva soluções serverless escaláveis e inovadoras sem complexidade. no portal.

2. Atualize appsettings.json📝 Logging com Serilog: Registre Tudo como um Detetive de Bugs!📝 Logging com Serilog: Registre Tudo como um Detetive de Bugs!Aprenda a usar Serilog em .NET para registrar logs estruturados, identificar erros e enriquecer informações, transformando seu código num enigma solucionável.:

"Azure": {
    "SignalR": {
        "ConnectionString": "Endpoint=..."
    }
}

3. Atualize Program.cs:

builder.Services.AddSignalR().AddAzureSignalR();

👉 Próximos Passos🔗

Aprimore seu chat:

🎯 Conclusão🔗

Com o SignalR, você pode criar aplicações em tempo real🚀 Scale Out com Redis: Atenda Milhões de Conexões!🚀 Scale Out com Redis: Atenda Milhões de Conexões!Integre o Redis com SignalR no .NET e distribua mensagens entre servidores, alcançando escalabilidade e alta performance em tempo real. de forma simples e eficiente. Este artigo cobriu o básico para criar um chat em tempo real, mas as possibilidades são infinitas. Agora é sua vez de explorar e criar algo incrível!

Se você gostou deste artigo, compartilhe com seus colegas e📊 Behavior-Driven Development: Testes que Todo Mundo Entende!📊 Behavior-Driven Development: Testes que Todo Mundo Entende!Descubra como o BDD transforma testes em linguagens acessíveis. Aprenda a usar SpecFlow em C# para criar testes claros, colaborativos e sem ambiguidades. continue explorando o mundo do .NET e C#. 🚀

Autor: Marcelo V. Souza - Engenheiro de Sistemas e Entusiasta em IoT e Desenvolvimento de Software, com foco em inovação tecnológica.

Referências🔗

Compartilhar artigo

Artigos Relacionados