مكتبات WebSocket لـ C# (.NET): SignalR و WebSocket4Net وعميل System.Net.WebSockets

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

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

ابدأ الدورة

مكتبات WebSocket لـ C# (.NET): الوقت الفعلي في تطبيقاتك



WebSocket هو بروتوكول يوفر اتصالاً ثنائي الاتجاه مستمراً بين العميل والخادم. في النظام البيئي C# (.NET)، توجد عدة مكتبات ناضجة للعمل مع WebSocket، مناسبة لكل من تطبيقات الخادم (ASP.NET Core) والعملاء (تطبيقات سطح المكتب، الجوال، وحدة التحكم). في هذه المقالة، سنستعرض ثلاث أدوات رئيسية: SignalR (إطار عمل عالي المستوى)، WebSocket4Net (عميل متعدد المنصات)، و System.Net.WebSockets المدمج (واجهة برمجة تطبيقات منخفضة المستوى).



1. SignalR — إطار عمل شامل للوقت الفعلي



SignalR هو جزء من ASP.NET Core، يقوم بتجريد العمل مع WebSocket و Server-Sent Events و Long Polling. يختار تلقائياً أفضل وسيلة نقل ويوفر واجهة برمجة تطبيقات مريحة لإرسال الرسائل إلى المجموعات والمستخدمين الفرديين وجميع العملاء المتصلين.



التثبيت

dotnet add package Microsoft.AspNetCore.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); }

public override async Task OnConnectedAsync() { await base.OnConnectedAsync(); Console.WriteLine($"العميل متصل: {Context.ConnectionId}"); }

public override async Task OnDisconnectedAsync(Exception? exception) { await base.OnDisconnectedAsync(exception); Console.WriteLine($"العميل غير متصل: {Context.ConnectionId}"); }}


مثال للعميل (C#)

using Microsoft.AspNetCore.SignalR.Client;

var connection = new HubConnectionBuilder() .WithUrl("https://localhost:5001/chatHub") .Build();

connection.On<string, string>("ReceiveMessage", (user, message) =>{ Console.WriteLine($"{user}: {message}");});

await connection.StartAsync();await connection.InvokeAsync("SendMessage", "بوت", "مرحباً بالعالم!");


2. WebSocket4Net — عميل خفيف لـ .NET Framework و .NET Core



WebSocket4Net هي مكتبة مستقلة تدعم كلاً من WebSocket القياسي (RFC 6455) والإضافات الخاصة (مثل WSS مع الشهادات الموقعة ذاتياً). إنها مفيدة بشكل خاص للتطبيقات التي تعمل على .NET Framework (Windows Forms, WPF) أو في بيئات ذات دعم محدود لواجهات برمجة التطبيقات الحديثة.



التثبيت عبر NuGet

Install-Package WebSocket4Net


مثال للعميل

using WebSocket4Net;

var ws = new WebSocket("wss://echo.websocket.org");

ws.Opened += (s, e) =>{ Console.WriteLine("تم إنشاء الاتصال"); ws.Send("مرحباً WebSocket!");};

ws.MessageReceived += (s, e) =>{ Console.WriteLine($"تم الاستلام: {e.Message}");};

ws.Closed += (s, e) =>{ Console.WriteLine("تم إغلاق الاتصال");};

ws.Error += (s, e) =>{ Console.WriteLine($"خطأ: {e.Exception.Message}");};

ws.Open();Console.ReadLine();


3. System.Net.WebSockets — واجهة برمجة تطبيقات مدمجة منخفضة المستوى



بدءاً من .NET Framework 4.5 وفي جميع إصدارات .NET Core، تتوفر الفئة المدمجة System.Net.WebSockets.ClientWebSocket. لا تتطلب تثبيت حزم إضافية وتمنح تحكماً كاملاً في الاتصال، ولكنها تتطلب إدارة يدوية للمخازن المؤقتة والعمليات غير المتزامنة.



مثال للعميل باستخدام ClientWebSocket

using System.Net.WebSockets;using System.Text;

public async Task ConnectAndSendAsync(string uri){ using var ws = new ClientWebSocket(); await ws.ConnectAsync(new Uri(uri), CancellationTok

توصيات