WebSocket in C#: Erstellung von Echtzeit-Anwendungen mit .NET

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Einführung in WebSocket in C# für Echtzeitanwendungen

Moderne Webanwendungen benötigen zunehmend eine sofortige Datenübertragung zwischen Client und Server. Das traditionelle HTTP-Protokoll, das nach einem „Anfrage-Antwort"-Schema arbeitet, ist für Aufgaben ineffizient, bei denen niedrige Latenz und konstante Informationsaktualisierungen wichtig sind: Online-Chats, Aktienkurse, Multiplayer-Spiele, Überwachungssysteme. WebSocket kommt zur Rettung — ein Protokoll, das eine dauerhafte bidirektionale Verbindung bereitstellt.

Im C# (.NET)-Ökosystem ist die WebSocket-Implementierung sowohl über die integrierten Klassen des System.Net.WebSockets-Namespaces als auch über die hochwertige SignalR-Bibliothek verfügbar. In diesem Artikel werden wir beide Ansätze behandeln, funktionierende Beispiele schreiben und architektonische Merkmale von Echtzeitanwendungen besprechen. Das Material wird sowohl für Anfänger als auch für erfahrene .NET-Entwickler nützlich sein.



WebSocket-Grundlagen: Wie es in C# funktioniert

WebSocket ist ein Protokoll, das nach einem anfänglichen HTTP-Handshake (Upgrade-Anfrage) die Verbindung in einen dauerhaften bidirektionalen Modus überführt. In C# basiert die Arbeit mit WebSocket auf asynchroner Programmierung unter Verwendung der Schlüsselwörter async und await.



Erstellen eines einfachen WebSocket-Servers in C#

Schauen wir uns ein einfaches Beispiel eines Servers an, der WebSocket-Verbindungen akzeptiert und Daten an den Client zurücksendet (Echo). Dafür verwenden wir die integrierte HttpListener-Klasse oder Kestrel (ASP.NET Core). Nachfolgend ein Beispiel basierend auf 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();

Der Code zeigt die grundlegende Mechanik: AcceptWebSocketAsync führt das Upgrade der HTTP-Anfrage auf WebSocket durch, und die Methoden ReceiveAsync und SendAsync ermöglichen den asynchronen Datenaustausch. Es ist wichtig, den Verbindungsstatus zu überwachen und die Verbindung ordnungsgemäß zu schließen.



WebSocket-Client in C#

Die Client-Seite ist ebenfalls einfach. Verwenden Sie die ClientWebSocket-Klasse:

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($"Er

Blogs

Buchempfehlungen