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

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

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


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


Ejemplo 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

Recommendations