Bibliotecas WebSocket C# (.NET): SignalR, Fleck, WebSocketSharp

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

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) =>

Recommendations