مكتبات WebSocket لـ C# (.NET): SignalR وFleck وWebSocketSharp
WebSocket هو بروتوكول اتصال ثنائي الاتجاه كامل فوق TCP، يسمح للخادم والعميل بتبادل البيانات في الوقت الفعلي دون طلبات HTTP مستمرة. في بيئة C# (.NET)، توجد عدة مكتبات تُبسّط دمج WebSocket. في هذه المقالة، سنستعرض ثلاثة من أشهر الحلول: SignalR (المكتبة الرسمية من Microsoft)، Fleck (خادم خفيف الوزن)، وWebSocketSharp (عميل-خادم متعدد الاستخدامات).
1. SignalR — الأداة الرسمية من Microsoft
SignalR هي مكتبة عالية المستوى لـ ASP.NET Core، تختار تلقائياً أفضل وسيلة نقل (WebSocket، Server-Sent Events، Long Polling) حسب إمكانيات العميل. وهي مثالية لإنشاء الدردشات ولوحات المعلومات والألعاب.
الميزات الرئيسية:
- التبديل التلقائي بين وسائل النقل.
- المجموعات والإرسال الجماعي.
- دعم التوسع (Redis، Azure SignalR Service).
- التكامل مع عملاء JavaScript و.NET وJava.
مثال على محور خادم بلغة C#:
using Microsoft.AspNetCore.SignalR;
public class ChatHub : Hub{ public async Task SendMessage(string user, string message) { // إرسال الرسالة لجميع العملاء المتصلين await Clients.All.SendAsync("ReceiveMessage", user, message); }
public override async Task OnConnectedAsync() { await Clients.Caller.SendAsync("Notify", "لقد اتصلت بالدردشة"); await base.OnConnectedAsync(); }}مثال على عميل بلغة C# (Console):
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", "مرحباً!");2. Fleck — خادم WebSocket بسيط
Fleck هي مكتبة خفيفة الوزن لإنشاء خوادم WebSocket دون اعتماد على ASP.NET. وهي مثالية للتطبيقات البسيطة التي لا تحتاج إلى تجريدات معقدة مثل SignalR.
الميزات:
- تعمل على TCP النقي (بدون HTTP).
- تدعم SSL (WSS).
- لا يوجد توسع مدمج — عملية واحدة فقط.
مثال على خادم باستخدام 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("تم اتصال العميل"); connections.Add(socket); }; socket.OnClose = () => { Console.WriteLine("تم فصل العميل"); connections.Remove(socket); }; socket.OnMessage = message => { // إرسال الرسالة للجميع foreach (var client in connections) { client.Send($"صدى: {message}"); } };});
Console.WriteLine("الخادم يعمل على ws://localhost:8181");Console.ReadLine();3. WebSocketSharp — عميل وخادم متعدد الاستخدامات
WebSocketSharp هي مكتبة مفتوحة المصدر توفر WebSocket من جانب العميل والخادم. وهي مستقلة عن ASP.NET وتعمل على .NET Framework و.NET Core.
الميزات الرئيسية:
- دعم SSL/TLS والبروكسي.
- نموذج قائم على الأحداث (OnOpen، OnClose، OnMessage، OnError).
- إرسال البيانات الثنائية (byte[]).
مثال على عميل باستخدام WebSocketSharp:
using WebSocketSharp;
using (var ws = new WebSocket("wss://echo.websocket.org")){ ws.OnMessage += (sender, e) =>