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