مكتبة WebSocket لـ C# (.NET): SignalR والأدوات البديلة للوقت الفعلي
في تطوير الويب الحديث، أصبحت الحاجة إلى الاتصال ثنائي الاتجاه في الوقت الفعلي معيارًا. تطبيقات الدردشة، الألعاب عبر الإنترنت، منصات التداول، مراقبة الخوادم — كل هذا يتطلب نقلًا فوريًا للبيانات. بالنسبة للغة C# (.NET)، توجد عدة مكتبات قوية تنفذ بروتوكول WebSocket. في هذه المقالة، سنشرح بالتفصيل SignalR — المكتبة الرائدة من Microsoft، بالإضافة إلى البدائل: WebSocketSharp و Fleck. ستتعلم كيفية اختيار الأداة المناسبة وكيفية البدء بسرعة.
ما هو WebSocket ولماذا هو مطلوب في C#
WebSocket هو بروتوكول يوفر اتصالًا مزدوجًا كاملًا بين العميل والخادم عبر اتصال TCP طويل العمر. على عكس HTTP، حيث يرسل العميل طلبًا وينتظر الرد، يسمح WebSocket للخادم ببدء إرسال البيانات في أي لحظة. بالنسبة لمنصة .NET، هذا مهم بشكل خاص، حيث أن C# قوية تقليديًا في تطوير الخادم، ويوسع WebSocket إمكانياتها لسيناريوهات الوقت الفعلي.
SignalR — الحل الرسمي من Microsoft
SignalR هي مكتبة لـ ASP.NET Core تعمل على تجريد العمل مع WebSocket، وتوفر واجهة برمجة تطبيقات عالية المستوى. تختار تلقائيًا أفضل وسيلة نقل: WebSocket، Server-Sent Events (SSE) أو Long Polling. SignalR مثالية للمشاريع المؤسسية حيث تكون قابلية التوسع والتكامل مع نظام .NET البيئي مهمة.
تثبيت SignalR
dotnet add package Microsoft.AspNetCore.SignalRمثال لدردشة بسيطة باستخدام SignalR
لننشئ Hub — فئة مركزية لإدارة الاتصالات:
using Microsoft.AspNetCore.SignalR;
public class ChatHub : Hub{ public async Task SendMessage(string user, string message) { await Clients.All.SendAsync("ReceiveMessage", user, message); }}الإعداد في Program.cs:
var builder = WebApplication.CreateBuilder(args);builder.Services.AddSignalR();
var app = builder.Build();app.MapHub<ChatHub>("/chat");
app.Run();العميل باستخدام JavaScript:
const connection = new signalR.HubConnectionBuilder() .withUrl("/chat") .build();
connection.on("ReceiveMessage", (user, message) => { console.log(`${user}: ${message}`);});
connection.start().catch(err => console.error(err));مزايا SignalR:
- اختيار تلقائي لوسيلة النقل (WebSocket، SSE، Long Polling)
- دعم الإرسال الجماعي والمستخدمين الفرديين
- معالجة مدمجة لإعادة الاتصال عند الانقطاع
- التكامل مع المصادقة ASP.NET Core Identity
- قابلية التوسع عبر Redis Backplane أو Azure SignalR Service
العيوب:
- ثقل الوزن للمشاريع البسيطة
- الاعتماد على ASP.NET Core (لا يعمل في تطبيقات الكونسول)
- صعوبة في الإعداد في السيناريوهات غير القياسية
WebSocketSharp — مكتبة خفيفة لـ .NET Framework و .NET Core
WebSocketSharp هي مكتبة بسيطة تنفذ بروتوكول WebSocket بدون تجريدات زائدة. مناسبة لإنشاء اتصالات WebSocket من جانب الخادم والعميل. مثالية للتضمين في تطبيقات الكونسول أو ألعاب Unity.
التثبيت عبر NuGet
dotnet add package WebSocketSharpمثال لخادم WebSocket
using WebSocketSharp;using WebSocketSharp.Server;
public class Echo : WebSocketBehavior{ protected override void OnMessage(MessageEventArgs e) { Send($"صدى: {e.Data}"); }}
class Program{ static void Main() { va