Warum WebSockets die Magie sind, die Sie unbedingt ausprobieren sollten
\n\nStellen 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\nWebSockets 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.
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\nWas sind WebSockets und warum C# die ideale Wahl ist
\n\nWebSocket 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
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\nErstes Projekt: Echtzeit-Chat mit WebSockets
\n\nBeginnen wir mit dem Klassiker – einem Chat. Er zeigt anschaulich die gesamte Mechanik: Verbindung, Senden, Empfangen und Schließen der Verbindung.
\n\nSchritt 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\ndotnet add package Microsoft.AspNetCore.WebSockets\n\nKonfigurieren Sie nun in Program.cs die Middleware. Hier ist der minimale Server-Code:
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