Bibliothèques WebSocket C# (.NET) : SignalR, WebSocket4Net et client System.Net.WebSockets

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

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


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


Exemple 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

Recommendations