csharp-websocketssharp

Cómo usar WebSockets en C# con la biblioteca WebSocket Sharp

WebSocket Sharp es una biblioteca de código abierto para implementar WebSocket en aplicaciones .NET.

Ya vimos en este tutorial este tutorial que implementar a mano una conexión por Websockets es bastante peñazo. Así que lo mejor es emplear una biblioteca que nos facilite el trabajo.

WebSocketSharp es la librería más conocida y popular para este trabajo. Proporciona una API fácil de usar y de alto nivel para implementar WebSocket en aplicaciones .NET.

WebSocketSharp implementa todas las funcionalidades que podamos esperar en una librería de WebSocket, como compresión, autentificación, gestión de headers, cookies. Entre otras muchas. muchas opciones.

Mirad la documentación de la biblioteca para un listado de las opciones disponibles y cómo usarlas.

Cómo usar WebSocketSharp

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

Install-Package WebSocketSharp

Aquí tenéis algunos de cómo utilizar WebSocketSharp para realizar una conexión tanto como servidor, como cliente.

Ejemplo como servidor

using WebSocketSharp.Server;
using WebSocketSharp;

public class TestService : WebSocketBehavior
{
    protected override void OnMessage(MessageEventArgs e)
    {
        Console.WriteLine("Received from client: " + e.Data);
        

        Send("Data from server");
    }

    protected override void OnError(WebSocketSharp.ErrorEventArgs e)
    {
        // do nothing
    }
}

public class Program
{
    public static void Main(string[] args)
    {
        var ws = new WebSocketServer("ws://localhost:9006");

        ws.AddWebSocketService<TestService>("/Test");
        ws.Start();
        Console.ReadKey(true);
        ws.Stop();      
   
    }
}

Ejemplo como cliente

using WebSocketSharp;

public class Program
{
    public static void Main(string[] args)
    {
        using var ws = new WebSocket("ws://localhost:9006/Test");
        ws.OnMessage += (sender, e) => Console.WriteLine("Received: " + e.Data);

        ws.Connect();
        ws.Send("Data from client");

        Console.ReadKey(true);
        ws.Close();
    }
}

WebSocketSharp es Open Source, y todo el código y documentación está disponible en el repositorio del proyecto en https://github.com/sta/websocket-sharp/

Lamentablemente, WebSocketSharp también tiene sus propios problemas. El principal de ellos es que está disponible sólo para .NET Framework.

La comunidad ha respondido creando distintos forks. Por ejemplo:

No obstante, en el próximo tutorial veremos como utilidad WatsonWebsockets, una biblioteca más moderna aunque menos conocida para hacer conexiones WebSocket en C#.