csharp-watson-websocket

Cómo usar WebSockets en C# con la biblioteca WatsonWebSocket

WatsonWebsocket es una librería de código abierto que proporciona una implementación fácil y rápida para conexiones Websockets para aplicaciones C#. Es compatible con el .NET Framework y .NET Core, y cuenta con una API sencilla y fácil de utilizar.

En tutoriales anteriores hemos visto cómo realizar una conexión WebSocket sin emplear ninguna librería, y aquí un tutorial utilizando WebsocketsSharp, la librería más popular de WebSockets para trabajar con Websockets en C#.

En esta ocasión, vamos a ver una tercera forma, usando la biblioteca WatsonWebsocket. Otra opción que, personalmente, es la que más me gusta a día de hoy.

Es compatible con .NET 6 en adelante, y por tanto multiplataforma (Windows, Linux, Android, Mac e IOs). No me ha dado errores nunca, la sintaxis es moderna, y muy sencilla de usar.

Además, WatsonWebsocket cuenta con una gran cantidad de opciones de configuración para ajustar el comportamiento de la librería, o al menos todas las que he necesitado usar alguna vez.

Cómo usar WatsonWebsocket

Podemos añadir la biblioteca a un proyecto de .NET fácilmente, a través del paquete Nuget correspondiente.

Install-Package WatsonWebsocket

Aquí tenéis algunos de cómo utilizar WatsonWebsocket extraídos de la documentación de la librería

Ejemplo como servidor

using System.Text;
using WatsonWebsocket;

WatsonWsServer server = new WatsonWsServer("127.0.0.1", 9006, false);
server.ClientConnected += (s, args) => Console.WriteLine($"Client connected: {args.Client}");
server.ClientDisconnected += (s, args) => Console.WriteLine($"Client disconnected: {args.Client}");
server.MessageReceived += (s, args) => Console.WriteLine($"Message received from {args.Client} : {Encoding.UTF8.GetString(args.Data)}");
server.Start();

Console.ReadLine();

Ejemplo como cliente

using System.Text;
using WatsonWebsocket;

WatsonWsClient client = new WatsonWsClient("127.0.0.1", 9006, false);
client.ServerConnected += (s, args) => Console.WriteLine("Server connected");
client.ServerDisconnected += (s, arg) => Console.WriteLine("Server disconnected");
client.MessageReceived += (s, args) => Console.WriteLine($"Message from server: {Encoding.UTF8.GetString(args.Data)}") ;
client.Start();

await client.SendAsync("hola");

Console.ReadLine();

Como vemos el uso de WatsonWebsocket es, de lejos, la más sencilla de las opciones que hemos visto hasta ahora. Para mi es un ejemplo de librería bien hecha.

Es mucho más sencilla y moderna que la viejecita WebsocketsSharp, e infinitamente más sencilla que usarlos “a mano”.

WatsonWebsocket es Open Source, y todo el código y documentación está disponible en el repositorio del proyecto en GitHub - jchristn/WatsonWebsocket