Bibliotecas WebSocket C# (.NET): SignalR, Fleck e WebSocketSharp
WebSocket é um protocolo de comunicação full-duplex sobre TCP, que permite que servidor e cliente troquem dados em tempo real sem requisições HTTP constantes. No ecossistema C# (.NET), existem várias bibliotecas que simplificam a integração WebSocket. Neste artigo, veremos três soluções mais populares: SignalR (biblioteca oficial da Microsoft), Fleck (servidor leve) e WebSocketSharp (cliente-servidor universal).
1. SignalR — ferramenta oficial da Microsoft
SignalR é uma biblioteca de alto nível para ASP.NET Core que escolhe automaticamente o melhor transporte (WebSocket, Server-Sent Events, Long Polling) dependendo das capacidades do cliente. É ideal para criar chats, painéis e jogos.
Principais recursos:
- Alternância automática entre transportes.
- Grupos e transmissões broadcast.
- Suporte a escalabilidade (Redis, Azure SignalR Service).
- Integração com clientes em JavaScript, .NET, Java.
Exemplo de hub no servidor em C#:
using Microsoft.AspNetCore.SignalR;
public class ChatHub : Hub{ public async Task SendMessage(string user, string message) { // Envia a mensagem para todos os clientes conectados await Clients.All.SendAsync("ReceiveMessage", user, message); }
public override async Task OnConnectedAsync() { await Clients.Caller.SendAsync("Notify", "Você se conectou ao chat"); await base.OnConnectedAsync(); }}Exemplo de cliente em C# (Console):
using Microsoft.AspNetCore.SignalR.Client;
var connection = new HubConnectionBuilder() .WithUrl("https://yourserver.com/chathub") .Build();
connection.On<string, string>("ReceiveMessage", (user, message) =>{ Console.WriteLine($"{user}: {message}");});
await connection.StartAsync();await connection.InvokeAsync("SendMessage", "User1", "Olá!");2. Fleck — servidor WebSocket minimalista
Fleck é uma biblioteca leve para criar servidores WebSocket sem dependências do ASP.NET. É ideal para aplicações simples onde não são necessárias abstrações complexas do SignalR.
Características:
- Funciona em TCP puro (sem HTTP).
- Suporta SSL (WSS).
- Sem escalabilidade embutida — apenas um processo.
Exemplo de servidor com Fleck:
using Fleck;
var server = new WebSocketServer("ws://0.0.0.0:8181");var connections = new List<IWebSocketConnection>();
server.Start(socket =>{ socket.OnOpen = () => { Console.WriteLine("Cliente conectado"); connections.Add(socket); }; socket.OnClose = () => { Console.WriteLine("Cliente desconectado"); connections.Remove(socket); }; socket.OnMessage = message => { // Envia a mensagem para todos foreach (var client in connections) { client.Send($"Eco: {message}"); } };});
Console.WriteLine("Servidor iniciado em ws://localhost:8181");Console.ReadLine();3. WebSocketSharp — cliente e servidor universais
WebSocketSharp é uma biblioteca de código aberto que fornece tanto cliente quanto servidor WebSocket. Não depende do ASP.NET e funciona no .NET Framework e .NET Core.
Principais recursos:
- Suporte a SSL/TLS e proxy.
- Modelo baseado em eventos (OnOpen, OnClose, OnMessage, OnError).
- Envio de dados binários (byte[]).
Exemplo de cliente com WebSocketSharp:
using WebSocketSharp;
using (var ws = new WebSocket("wss://echo.websocket.org")){ ws.OnMessage += (sender, e) => Também na biblioteca
Registro para Swift (iOS/macOS): melhores bibliotecas e soluções
Biblioteca Padrão C++: visão geral completa dos recursos
Aprendizado de Máquina em C# (.NET): Visão Geral de Bibliotecas e Ferramentas