Bibliotecas WebSocket C# (.NET): tiempo real en tus aplicaciones
WebSocket es un protocolo que proporciona una conexión bidireccional permanente entre el cliente y el servidor. En el ecosistema C# (.NET) existen varias bibliotecas maduras para trabajar con WebSocket, adecuadas tanto para aplicaciones de servidor (ASP.NET Core) como para clientes (escritorio, móviles, consola). En este artículo analizaremos tres herramientas clave: SignalR (framework de alto nivel), WebSocket4Net (cliente multiplataforma) y el integrado System.Net.WebSockets (API de bajo nivel).
1. SignalR — framework universal para tiempo real
SignalR es parte de ASP.NET Core que abstrae el trabajo con WebSocket, Server-Sent Events y Long Polling. Selecciona automáticamente el mejor transporte y proporciona una API conveniente para enviar mensajes a grupos, usuarios individuales y todos los clientes conectados.
Instalación
dotnet add package Microsoft.AspNetCore.SignalREjemplo de servidor (Hub)
using Microsoft.AspNetCore.SignalR;
public class ChatHub : Hub{ public async Task SendMessage(string user, string message) { // Enviamos el mensaje a todos los 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}"); }}Ejemplo 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", "¡Hola, mundo!");2. WebSocket4Net — cliente ligero para .NET Framework y .NET Core
WebSocket4Net es una biblioteca independiente que admite tanto WebSocket estándar (RFC 6455) como extensiones propietarias (por ejemplo, WSS con certificados autofirmados). Es especialmente útil para aplicaciones que funcionan en .NET Framework (Windows Forms, WPF) o en entornos con soporte limitado de APIs modernas.
Instalación mediante NuGet
Install-Package WebSocket4NetEjemplo de cliente
using WebSocket4Net;
var ws = new WebSocket("wss://echo.websocket.org");
ws.Opened += (s, e) =>{ Console.WriteLine("Conexión establecida"); ws.Send("¡Hola, WebSocket!");};
ws.MessageReceived += (s, e) =>{ Console.WriteLine($"Recibido: {e.Message}");};
ws.Closed += (s, e) =>{ Console.WriteLine("Conexión cerrada");};
ws.Error += (s, e) =>{ Console.WriteLine($"Error: {e.Exception.Message}");};
ws.Open();Console.ReadLine();3. System.Net.WebSockets — API integrada de bajo nivel
A partir de .NET Framework 4.5 y en todas las versiones de .NET Core, está disponible la clase integrada System.Net.WebSockets.ClientWebSocket. No requiere instalar paquetes adicionales y brinda control total sobre la conexión, pero requiere gestión manual de búferes y operaciones asíncronas.
Ejemplo 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 También en la biblioteca
Creación de aplicaciones CLI en TypeScript: visión general de frameworks y herramientas
Trabajo con Excel en Go (Golang): bibliotecas exelize y tealeg/xlsx
Aprendizaje automático en Go: revisión de bibliotecas y frameworks (Golang)
Internacionalización (i18n) en Java: guía completa con ejemplos
Limitación de Tasa en Kotlin: bibliotecas e implementación