Bibliothèques WebSocket C# (.NET) : SignalR, Fleck et WebSocketSharp
WebSocket est un protocole de communication bidirectionnelle sur TCP, permettant au serveur et au client d'échanger des données en temps réel sans requêtes HTTP constantes. Dans l'écosystème C# (.NET), plusieurs bibliothèques simplifient l'intégration de WebSocket. Dans cet article, nous examinons trois solutions populaires : SignalR (bibliothèque officielle de Microsoft), Fleck (serveur léger) et WebSocketSharp (client-serveur universel).
1. SignalR — l'outil officiel de Microsoft
SignalR est une bibliothèque de haut niveau pour ASP.NET Core qui sélectionne automatiquement le meilleur transport (WebSocket, Server-Sent Events, Long Polling) en fonction des capacités du client. Elle est idéale pour créer des chats, des tableaux de bord et des jeux.
Fonctionnalités principales :
- Commutation automatique entre les transports.
- Groupes et diffusions larges.
- Prise en charge de la mise à l'échelle (Redis, Azure SignalR Service).
- Intégration avec les clients JavaScript, .NET, Java.
Exemple de hub serveur en C# :
using Microsoft.AspNetCore.SignalR;
public class ChatHub : Hub{ public async Task SendMessage(string user, string message) { // Diffuse le message à tous les clients connectés await Clients.All.SendAsync("ReceiveMessage", user, message); }
public override async Task OnConnectedAsync() { await Clients.Caller.SendAsync("Notify", "Vous êtes connecté au chat"); await base.OnConnectedAsync(); }}Exemple de client en C# (Console) :
using Microsoft.AspNetCore.SignalR.Client;
var connection = new HubConnectionBuilder() .WithUrl("https://yourserver.com/chathub") .Build();
connection.On<string, string>("ReceiveMessage", (user, message) =>{ Console.WriteLine($"{user}: {message}");});
await connection.StartAsync();await connection.InvokeAsync("SendMessage", "User1", "Bonjour !");2. Fleck — serveur WebSocket minimaliste
Fleck est une bibliothèque légère pour créer des serveurs WebSocket sans dépendances ASP.NET. Elle est parfaite pour les applications simples qui n'ont pas besoin des abstractions complexes de SignalR.
Caractéristiques :
- Fonctionne sur TCP pur (sans HTTP).
- Prend en charge SSL (WSS).
- Pas de mise à l'échelle intégrée — un seul processus.
Exemple de serveur avec Fleck :
using Fleck;
var server = new WebSocketServer("ws://0.0.0.0:8181");var connections = new List<IWebSocketConnection>();
server.Start(socket =>{ socket.OnOpen = () => { Console.WriteLine("Client connecté"); connections.Add(socket); }; socket.OnClose = () => { Console.WriteLine("Client déconnecté"); connections.Remove(socket); }; socket.OnMessage = message => { // Envoie le message à tous foreach (var client in connections) { client.Send($"Écho : {message}"); } };});
Console.WriteLine("Serveur démarré sur ws://localhost:8181");Console.ReadLine();3. WebSocketSharp — client et serveur universels
WebSocketSharp est une bibliothèque open source qui fournit à la fois un client et un serveur WebSocket. Elle est indépendante d'ASP.NET et fonctionne sur .NET Framework et .NET Core.
Fonctionnalités clés :
- Prise en charge de SSL/TLS et des proxys.
- Modèle événementiel (OnOpen, OnClose, OnMessage, OnError).
- Envoi de données binaires (byte[]).
Exemple de client avec WebSocketSharp :
using WebSocketSharp;
using (var ws = new WebSocket("wss://echo.websocket.org")){ ws.OnMessage += (sender, e) => Aussi dans la bibliothèque
ORM pour JavaScript (Node.js) : comparaison de Sequelize, TypeORM, Prisma
Travailler avec Apache Kafka en Java : guide complet pour développeur
Envoi de SMS en C++ : API bibliothèque LibCurl et requêtes REST
OneOf pour C# (.NET) : guide complet avec exemples
Travailler avec Kafka en PHP : bibliothèques, connexion et exemples de code