WebSocket en C# : création d'applications en temps réel avec .NET

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

Introduction à WebSocket en C# pour les applications temps réel

Les applications web modernes nécessitent de plus en plus un transfert instantané de données entre le client et le serveur. Le protocole HTTP traditionnel, fonctionnant sur un schéma "requête-réponse", est inefficace pour les tâches où une faible latence et des mises à jour constantes des informations sont importantes : chats en ligne, cotations boursières, jeux multijoueurs, systèmes de surveillance. WebSocket vient à la rescousse — un protocole qui fournit une connexion bidirectionnelle persistante.

Dans l'écosystème C# (.NET), l'implémentation de WebSocket est disponible à la fois via les classes intégrées de l'espace de noms System.Net.WebSockets et via la bibliothèque de haut niveau SignalR. Dans cet article, nous aborderons les deux approches, écrirons des exemples fonctionnels et discuterons des caractéristiques architecturales des applications temps réel. Ce matériel sera utile tant pour les développeurs .NET débutants qu'expérimentés.



Bases de WebSocket : Comment cela fonctionne en C#

WebSocket est un protocole qui, après une poignée de main HTTP initiale (requête de mise à niveau), fait passer la connexion en mode bidirectionnel persistant. En C#, le travail avec WebSocket repose sur la programmation asynchrone utilisant les mots-clés async et await.



Création d'un serveur WebSocket simple en C#

Regardons un exemple de base d'un serveur qui accepte les connexions WebSocket et renvoie un écho au client. Pour cela, nous utilisons la classe intégrée HttpListener ou Kestrel (ASP.NET Core). Voici un exemple basé sur ASP.NET Core.

// Startup.cs or Program.cs (minimal API)var builder = WebApplication.CreateBuilder(args);var app = builder.Build();

app.UseWebSockets();

app.Map("/ws", async (HttpContext context) =>{ if (context.WebSockets.IsWebSocketRequest) { using var webSocket = await context.WebSockets.AcceptWebSocketAsync(); await Echo(webSocket); } else { context.Response.StatusCode = 400; }});

async Task Echo(WebSocket webSocket){ var buffer = new byte[1024 * 4]; while (webSocket.State == WebSocketState.Open) { var result = await webSocket.ReceiveAsync( new ArraySegment<byte>(buffer), CancellationToken.None); if (result.MessageType == WebSocketMessageType.Close) { await webSocket.CloseAsync( WebSocketCloseStatus.NormalClosure, "Closing", CancellationToken.None); } else { // Send data back (echo) await webSocket.SendAsync( new ArraySegment<byte>(buffer, 0, result.Count), result.MessageType, result.EndOfMessage, CancellationToken.None); } }}

app.Run();

Le code démontre la mécanique de base : AcceptWebSocketAsync fait passer la requête HTTP en WebSocket, et les méthodes ReceiveAsync et SendAsync fournissent un échange de données asynchrone. Il est important de gérer l'état de la connexion et de la fermer correctement.



Client WebSocket en C#

Le côté client est également simple. Utilisez la classe ClientWebSocket :

using System.Net.WebSockets;

async Task ConnectAndSend(){ using var client = new ClientWebSocket(); await client.ConnectAsync(new Uri("ws://localhost:5000/ws"), CancellationToken.None);

var message = "Hello, WebSocket!"; var bytes = Encoding.UTF8.GetBytes(message); await client.SendAsync(new ArraySegment<byte>(bytes), WebSocketMessageType.Text, true, CancellationToken.None);

var buffer = new byte[1024]; var result = await client.ReceiveAsync( new ArraySegment<byte>(buffer), CancellationToken.None); var response = Encoding.UTF8.GetString(buffer, 0, result.Count); Console.WriteLine($"Re

Blogs

Book Recommendations