WebSockets en C# : Créons des applications temps réel qui fonctionnent comme sur des roulettes

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

Pourquoi les WebSockets sont une magie que vous devez essayer

\n\n

Imaginez : vous avez ouvert un site avec le cours des cryptomonnaies. Les prix sautent chaque seconde. Ou un chat en ligne, où les messages arrivent instantanément, sans « actualisez la page ». Comment ça marche ? Avant, le navigateur tirait constamment le serveur : « Hé, y a-t-il du nouveau ? » — et le serveur répondait : « Non, va dormir ». Cela s'appelle HTTP polling. C'est lent, consomme du trafic et surcharge le serveur.

\n\n

Les WebSockets sont comme un canal de communication ouvert. Le serveur peut lui-même dire au client : « Regarde, une mise à jour ! » — sans requêtes inutiles. En C#, travailler avec les WebSockets est non seulement pratique, mais élégant. L'écosystème .NET fournit des outils prêts à l'emploi : des classes natives System.Net.WebSockets au puissant SignalR.

\n\n

Dans cet article, nous ne parlerons pas seulement de théorie. Nous allons écrire deux projets réels : un chat temps réel et un moniteur boursier. Vous verrez comment créer un serveur WebSocket C# et y connecter un client. C'est parti !

\n\n

Qu'est-ce que les WebSockets et pourquoi C# est le choix idéal

\n\n

WebSocket est un protocole de communication bidirectionnelle sur TCP. Après la poignée de main (handshake), la connexion reste ouverte. Les données volent dans les deux sens sans en-têtes HTTP. Cela offre :

\n\n
    \n
  • La vitesse — une latence en millisecondes.
  • \n
  • L'économie de ressources — une seule connexion au lieu de centaines de requêtes.
  • \n
  • Un vrai temps réel — le serveur initie lui-même l'envoi.
  • \n
\n\n

C# dans ce contexte est un véritable artilleur lourd. ASP.NET Core supporte les WebSockets nativement. De plus, la programmation asynchrone (async/await) s'intègre parfaitement au modèle de travail avec les canaux. Vous ne bloquez pas le thread en attendant un message — cela rend le code performant et lisible.

\n\n

Premier projet : chat temps réel avec WebSockets

\n\n

Commençons par un classique — le chat. Il montre clairement toute la mécanique : connexion, envoi, réception et fermeture de la connexion.

\n\n

Étape 1 : Créons un serveur WebSocket en C#

\n\n

Ouvrez Visual Studio ou un terminal. Créez un nouveau projet ASP.NET Core Web API (ou vide). Installez le package si nécessaire :

\n\n
dotnet add package Microsoft.AspNetCore.WebSockets
\n\n

Maintenant, dans Program.cs, configurons le middleware. Voici le code minimal du serveur :

\n\n
var builder = WebApplication.CreateBuilder(args);\nbuilder.Services.AddWebSockets(options => { });\nvar app = builder.Build();\n\napp.UseWebSockets();\n\n// Liste pour stocker tous les clients connectés\nvar clients = new List<System.Net.WebSockets.WebSocket>();\n\napp.Map("/chat", async (HttpContext context) =>\n{\n    if (context.WebSockets.IsWebSocketRequest)\n    {\n        var webSocket = await context.WebSockets.AcceptWebSocketAsync();\n        clients.Add(webSocket);\n        Console.WriteLine("Nouveau client connecté !");\n\n        // Tampon pour la réception des données\n        var buffer = new byte[1024 * 4];\n        while (webSocket.State == WebSocketState.Open)\n        {\n            var result = await webSocket.ReceiveAsync(\n                new ArraySegment<byte>(buffer), CancellationToken.None);\n            \n            if (result.MessageType == WebSocketMessageType.Close)\n            {\n                await webSocket.CloseAsync(\n                    WebSocketCloseStatus.NormalClosure, \n                    "Connexion fermée", CancellationToken.None);\n                clients.Remove(webSocket);\n                Console.WriteLine("Client déconnecté.");\n            }\n            else if (result.MessageType == WebSocketMessageType.Text)\n            {\n                // Recevoir le message d'un client\n                var message = System.Text.Encoding.UTF8.GetString(buffer, 0, result.Count);\n                Console.WriteLine($"Reçu : {message}");\n\n                // Diffuser à tous les autres\n                v                

Blogs

Book Recommendations