Bibliotecas WebSocket C# (.NET): tempo real em suas aplicações
WebSocket é um protocolo que fornece uma conexão bidirecional contínua entre cliente e servidor. No ecossistema C# (.NET), existem várias bibliotecas maduras para trabalhar com WebSocket, adequadas tanto para aplicações servidoras (ASP.NET Core) quanto para clientes (desktop, mobile, console). Neste artigo, abordaremos três ferramentas principais: SignalR (framework de alto nível), WebSocket4Net (cliente multiplataforma) e o nativo System.Net.WebSockets (API de baixo nível).
1. SignalR — framework universal para tempo real
SignalR faz parte do ASP.NET Core e abstrai o trabalho com WebSocket, Server-Sent Events e Long Polling. Ele seleciona automaticamente o melhor transporte e oferece uma API conveniente para enviar mensagens para grupos, usuários individuais e todos os clientes conectados.
Instalação
dotnet add package Microsoft.AspNetCore.SignalRExemplo de servidor (Hub)
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 base.OnConnectedAsync(); Console.WriteLine($"Cliente conectado: {Context.ConnectionId}"); }
public override async Task OnDisconnectedAsync(Exception? exception) { await base.OnDisconnectedAsync(exception); Console.WriteLine($"Cliente desconectado: {Context.ConnectionId}"); }}Exemplo de cliente (C#)
using Microsoft.AspNetCore.SignalR.Client;
var connection = new HubConnectionBuilder() .WithUrl("https://localhost:5001/chatHub") .Build();
connection.On<string, string>("ReceiveMessage", (user, message) =>{ Console.WriteLine($"{user}: {message}");});
await connection.StartAsync();await connection.InvokeAsync("SendMessage", "Bot", "Olá, mundo!");2. WebSocket4Net — cliente leve para .NET Framework e .NET Core
WebSocket4Net é uma biblioteca independente que suporta tanto WebSocket padrão (RFC 6455) quanto extensões proprietárias (por exemplo, WSS com certificados autoassinados). Ela é especialmente útil para aplicações que rodam no .NET Framework (Windows Forms, WPF) ou em ambientes com suporte limitado a APIs modernas.
Instalação via NuGet
Install-Package WebSocket4NetExemplo de cliente
using WebSocket4Net;
var ws = new WebSocket("wss://echo.websocket.org");
ws.Opened += (s, e) =>{ Console.WriteLine("Conexão estabelecida"); ws.Send("Olá, WebSocket!");};
ws.MessageReceived += (s, e) =>{ Console.WriteLine($"Recebido: {e.Message}");};
ws.Closed += (s, e) =>{ Console.WriteLine("Conexão fechada");};
ws.Error += (s, e) =>{ Console.WriteLine($"Erro: {e.Exception.Message}");};
ws.Open();Console.ReadLine();3. System.Net.WebSockets — API nativa de baixo nível
A partir do .NET Framework 4.5 e em todas as versões do .NET Core, está disponível a classe nativa System.Net.WebSockets.ClientWebSocket. Ela não requer instalação de pacotes adicionais e oferece controle total sobre a conexão, mas exige gerenciamento manual de buffers e operações assíncronas.
Exemplo de cliente usando ClientWebSocket
using System.Net.WebSockets;using System.Text;
public async Task ConnectAndSendAsync(string uri){ using var ws = new ClientWebSocket(); await ws.ConnectAsync(new Uri(uri), CancellationTok Também na biblioteca
Event Bus e padrão Observer em Swift: implementação e exemplos
Geração de relatórios PDF em TypeScript: bibliotecas e ferramentas
Cliente Elasticsearch para Swift (iOS/macOS): integração e exemplos
Trabalhando com Excel em PHP: bibliotecas PhpSpreadsheet e OpenSpout
Métricas Prometheus em TypeScript: guia completo de monitoramento