مكتبات WebSocket لـ C# (.NET): SignalR، Fleck، WebSocketSharp

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

مكتبات 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) =>

توصيات