Bibliothèques WebSocket C# (.NET) : le temps réel dans vos applications
WebSocket est un protocole assurant une connexion bidirectionnelle permanente entre un client et un serveur. Dans l'écosystème C# (.NET), il existe plusieurs bibliothèques matures pour travailler avec WebSocket, adaptées aussi bien aux applications serveur (ASP.NET Core) qu'aux clients (applications de bureau, mobiles, console). Dans cet article, nous examinons trois outils clés : SignalR (framework haut niveau), WebSocket4Net (client multiplateforme) et l'API intégrée System.Net.WebSockets (bas niveau).
1. SignalR — un framework universel pour le temps réel
SignalR fait partie d'ASP.NET Core et abstrait le travail avec WebSocket, Server-Sent Events et Long Polling. Il sélectionne automatiquement le meilleur transport et fournit une API pratique pour envoyer des messages à des groupes, des utilisateurs individuels et tous les clients connectés.
Installation
dotnet add package Microsoft.AspNetCore.SignalRExemple de serveur (Hub)
using Microsoft.AspNetCore.SignalR;
public class ChatHub : Hub{ public async Task SendMessage(string user, string message) { // Envoyer le message à tous les clients connectés await Clients.All.SendAsync("ReceiveMessage", user, message); }
public override async Task OnConnectedAsync() { await base.OnConnectedAsync(); Console.WriteLine($"Client connecté : {Context.ConnectionId}"); }
public override async Task OnDisconnectedAsync(Exception? exception) { await base.OnDisconnectedAsync(exception); Console.WriteLine($"Client déconnecté : {Context.ConnectionId}"); }}Exemple de client (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", "Bonjour le monde !");2. WebSocket4Net — un client léger pour .NET Framework et .NET Core
WebSocket4Net est une bibliothèque indépendante qui prend en charge à la fois les WebSocket standard (RFC 6455) et les extensions propriétaires (par exemple, WSS avec des certificats auto-signés). Elle est particulièrement utile pour les applications fonctionnant sous .NET Framework (Windows Forms, WPF) ou dans des environnements avec un support limité des API modernes.
Installation via NuGet
Install-Package WebSocket4NetExemple de client
using WebSocket4Net;
var ws = new WebSocket("wss://echo.websocket.org");
ws.Opened += (s, e) =>{ Console.WriteLine("Connexion établie"); ws.Send("Bonjour, WebSocket !");};
ws.MessageReceived += (s, e) =>{ Console.WriteLine($"Reçu : {e.Message}");};
ws.Closed += (s, e) =>{ Console.WriteLine("Connexion fermée");};
ws.Error += (s, e) =>{ Console.WriteLine($"Erreur : {e.Exception.Message}");};
ws.Open();Console.ReadLine();3. System.Net.WebSockets — API intégrée de bas niveau
Depuis .NET Framework 4.5 et dans toutes les versions de .NET Core, la classe intégrée System.Net.WebSockets.ClientWebSocket est disponible. Elle ne nécessite pas l'installation de paquets supplémentaires et offre un contrôle total sur la connexion, mais nécessite une gestion manuelle des tampons et des opérations asynchrones.
Exemple de client utilisant 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