Bibliotecas WebSocket C# (.NET): SignalR, WebSocket4Net e cliente System.Net.WebSockets

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): 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.SignalR


Exemplo 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 WebSocket4Net


Exemplo 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

Recommendations