WebSockets in C#: Echtzeit-Anwendungen erstellen, die wie am Schnürchen laufen

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

Warum WebSockets die Magie sind, die Sie unbedingt ausprobieren sollten

\n\n

Stellen Sie sich vor: Sie haben eine Website mit Kryptowährungskursen geöffnet. Die Preise springen jede Sekunde. Oder ein Online-Chat, bei dem Nachrichten sofort ankommen, ohne "Seite aktualisieren". Wie funktioniert das? Früher hat der Browser ständig den Server angefragt: "Hey, gibt es etwas Neues?" – und der Server antwortete: "Nein, geh schlafen." Das nennt man HTTP Polling. Es ist langsam, verbraucht Traffic und belastet den Server.

\n\n

WebSockets sind wie ein offener Kommunikationskanal. Der Server kann dem Client selbst sagen: "Schau, ein Update!" – ohne unnötige Anfragen. In C# mit WebSockets zu arbeiten, ist nicht nur bequem, sondern elegant. Das .NET-Ökosystem bietet fertige Werkzeuge: von den nativen Klassen System.Net.WebSockets bis hin zu leistungsstarkem SignalR.

\n\n

In diesem Artikel sprechen wir nicht nur über die Theorie. Wir werden zwei reale Projekte schreiben: einen Echtzeit-Chat und einen Börsenmonitor. Sie werden sehen, wie Sie einen WebSocket-Server in C# erstellen und einen Client daran anschließen. Los geht's!

\n\n

Was sind WebSockets und warum C# die ideale Wahl ist

\n\n

WebSocket ist ein Protokoll für bidirektionale Kommunikation über TCP. Nach dem Handshake bleibt die Verbindung offen. Daten fließen in beide Richtungen ohne HTTP-Header. Das bietet:

\n\n
    \n
  • Geschwindigkeit – Latenz im Millisekundenbereich.
  • \n
  • Ressourcenschonung – eine einzige Verbindung statt hunderter Anfragen.
  • \n
  • Echten Echtzeitbetrieb – der Server initiiert das Senden selbst.
  • \n
\n\n

C# ist in diesem Kontext eine echte Schwergewichtsartillerie. ASP.NET Core unterstützt WebSockets von Haus aus. Außerdem passt die asynchrone Programmierung (async/await) perfekt zum Arbeitsmodell mit Kanälen. Sie blockieren keinen Thread, während Sie auf eine Nachricht warten – das macht den Code leistungsfähig und lesbar.

\n\n

Erstes Projekt: Echtzeit-Chat mit WebSockets

\n\n

Beginnen wir mit dem Klassiker – einem Chat. Er zeigt anschaulich die gesamte Mechanik: Verbindung, Senden, Empfangen und Schließen der Verbindung.

\n\n

Schritt 1: Erstellen eines WebSocket-Servers in C#

\n\n

Öffnen Sie Visual Studio oder ein Terminal. Erstellen Sie ein neues ASP.NET Core Web API-Projekt (oder ein leeres). Installieren Sie bei Bedarf das Paket:

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

Konfigurieren Sie nun in Program.cs die Middleware. Hier ist der minimale Server-Code:

\n\n
var builder = WebApplication.CreateBuilder(args);\nbuilder.Services.AddWebSockets(options => { });\nvar app = builder.Build();\n\napp.UseWebSockets();\n\n// Liste zum Speichern aller verbundenen Clients\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("Neuer Client verbunden!");\n\n        // Puffer zum Empfangen von Daten\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                    "Verbindung geschlossen", CancellationToken.None);\n                clients.Remove(webSocket);\n                Console.WriteLine("Client getrennt.");\n            }\n            else if (result.MessageType == WebSocketMessageType.Text)\n            {\n                // Nachricht von einem Client empfangen\n                var message = System.Text.Encoding.UTF8.GetString(buffer, 0, result.Count);\n                Console.WriteLine($"Empfangen: {message}");\n\n                // An alle anderen senden\n                v                

Blogs

Buchempfehlungen