WebSocket-Bibliotheken für C# (.NET): SignalR, Fleck und WebSocketSharp
WebSocket ist ein Protokoll für die Vollduplex-Kommunikation über TCP, das es Server und Client ermöglicht, in Echtzeit Daten auszutauschen, ohne ständige HTTP-Anfragen. Im C# (.NET)-Ökosystem gibt es mehrere Bibliotheken, die die Integration von WebSocket vereinfachen. In diesem Artikel betrachten wir drei der beliebtesten Lösungen: SignalR (offizielle Microsoft-Bibliothek), Fleck (leichter Server) und WebSocketSharp (universeller Client-Server).
1. SignalR – offizielles Tool von Microsoft
SignalR ist eine hochwertige Bibliothek für ASP.NET Core, die automatisch den besten Transport (WebSocket, Server-Sent Events, Long Polling) basierend auf den Fähigkeiten des Clients auswählt. Sie eignet sich ideal für die Erstellung von Chats, Dashboards und Spielen.
Hauptfunktionen:
- Automatische Umschaltung zwischen Transporten.
- Gruppen und Broadcast-Nachrichten.
- Unterstützung für Skalierung (Redis, Azure SignalR Service).
- Integration mit Clients auf JavaScript, .NET, Java.
Beispiel eines Server-Hubs in C#:
using Microsoft.AspNetCore.SignalR;
public class ChatHub : Hub{ public async Task SendMessage(string user, string message) { // Sende Nachricht an alle verbundenen Clients await Clients.All.SendAsync("ReceiveMessage", user, message); }
public override async Task OnConnectedAsync() { await Clients.Caller.SendAsync("Notify", "Sie haben sich mit dem Chat verbunden"); await base.OnConnectedAsync(); }}Beispiel eines Clients in C# (Konsole):
using Microsoft.AspNetCore.SignalR.Client;
var connection = new HubConnectionBuilder() .WithUrl("https://yourserver.com/chathub") .Build();
connection.On<string, string>("ReceiveMessage", (user, message) =>{ Console.WriteLine($"{user}: {message}");});
await connection.StartAsync();await connection.InvokeAsync("SendMessage", "User1", "Hallo!");2. Fleck – minimalistischer WebSocket-Server
Fleck ist eine leichte Bibliothek zur Erstellung von WebSocket-Servern ohne Abhängigkeiten von ASP.NET. Sie eignet sich ideal für einfache Anwendungen, bei denen keine komplexen Abstraktionen wie bei SignalR erforderlich sind.
Besonderheiten:
- Funktioniert auf reinem TCP (ohne HTTP).
- Unterstützt SSL (WSS).
- Keine integrierte Skalierung – nur ein Prozess.
Beispiel eines Servers mit Fleck:
using Fleck;
var server = new WebSocketServer("ws://0.0.0.0:8181");var connections = new List<IWebSocketConnection>();
server.Start(socket =>{ socket.OnOpen = () => { Console.WriteLine("Client verbunden"); connections.Add(socket); }; socket.OnClose = () => { Console.WriteLine("Client getrennt"); connections.Remove(socket); }; socket.OnMessage = message => { // Sende Nachricht an alle foreach (var client in connections) { client.Send($"Echo: {message}"); } };});
Console.WriteLine("Server gestartet auf ws://localhost:8181");Console.ReadLine();3. WebSocketSharp – universeller Client und Server
WebSocketSharp ist eine Open-Source-Bibliothek, die sowohl einen Client- als auch einen Server-WebSocket bereitstellt. Sie ist unabhängig von ASP.NET und funktioniert mit .NET Framework und .NET Core.
Wichtige Funktionen:
- Unterstützung für SSL/TLS und Proxy.
- Ereignisgesteuertes Modell (OnOpen, OnClose, OnMessage, OnError).
- Senden von Binärdaten (byte[]).
Beispiel eines Clients mit WebSocketSharp:
using WebSocketSharp;
using (var ws = new WebSocket("wss://echo.websocket.org")){ ws.OnMessage += (sender, e) => Auch in der Bibliothek
E-Mail-Versand in Java: Bibliotheken JavaMail und Simple Java Mail
HTTP-Client für Swift (iOS/macOS): Top-Bibliotheken 2024
Arbeiten mit XML in Go: encoding/xml, Bibliotheken und Beispiele
PDF-Generierung in Java mit iText
JSON-Verarbeitung in Rust: serde_json, simd-json, json5 und andere Bibliotheken