.NET 𝗦𝗲𝗿𝘃𝗲𝗿 𝗦𝗶𝗱𝗲 𝗘𝘃𝗲𝗻𝘁𝘀 𝘄𝗶𝘁𝗵 𝗠𝗼𝗻𝗴𝗼𝗗𝗕 𝗖𝗵𝗮𝗻𝗴𝗲 𝗦𝘁𝗿𝗲𝗮𝗺𝘀

إذا كنت ترغب في الحصول على تحديثات في الوقت الفعلي في ASP.NET Core، فقد تفكر في WebSockets أولاً.

هناك طريقة أبسط للوحات التحكم (dashboards) وخلاصات البيانات (feeds). يمكنك استخدام MongoDB Change Streams و Server-Sent Events (SSE).

يوفر هذا الإعداد بثاً أحادي الاتجاه من الخادم الخاص بك إلى العميل بأقل قدر ممكن من الكود.

كيف يعمل الأمر:

  • تكتشف MongoDB Change Streams التغييرات في قاعدة البيانات فوراً.
  • تقوم SSE بدفع تلك التغييرات إلى المتصفح عبر اتصال HTTP واحد.
  • ستتجنب عملية الاستعلام المستمر (polling)، مما يوفر موارد الخادم.

تُعد SSE واجهة برمجة تطبيقات (API) أصلية في المتصفح. فهي تعمل من خلال استجابة HTTP طويلة الأمد وتدعم إعادة الاتصال التلقائي. وهي مثالية لـ:

  • الجداول الزمنية المباشرة (Live timelines)
  • الإشعارات
  • خلاصات النشاط
  • لوحات تحكم المسؤولين

في ASP.NET Core Minimal APIs، يمكنك تنفيذ ذلك باستخدام TypedResults.ServerSentEvents.

يتبع تدفق الكود هذه الخطوات:

  1. يفتح تطبيقك مؤشر (cursor) لتدفق التغييرات في MongoDB.
  2. تصدر MongoDB أحداثاً عند تغيير البيانات.
  3. يقوم تطبيقك بربط هذه التغييرات بالعميل.

إحدى المزايا الرئيسية هي القدرة على استئناف التدفقات. توفر MongoDB رمز استئناف (resume token) لكل تغيير. يمكنك تمرير هذا الرمز عبر ترويسة Last-Event-ID. عندما يعيد المتصفح الاتصال، فإنه يرسل آخر معرف (ID) رآه. يقرأ تطبيقك هذا المعرف ويخبر MongoDB بالبدء تماماً من حيث توقف.

متى يجب عليك استخدام SSE مقابل SignalR؟

استخدم SSE إذا:

  • كنت تحتاج فقط إلى تحديثات من الخادم إلى العميل.
  • كنت تريد إعداداً خفيف الوزن ويعتمد على النصوص.
  • كنت تريد استخدام واجهات برمجة تطبيقات المتصفح الأصلية.

استخدم SignalR إذا:

  • كنت تحتاج إلى اتصال ثنائي الاتجاه (bi-directional).
  • كنت تحتاج إلى ميزات معقدة مثل المجموعات (groups) أو المحاور (hubs).
  • كنت تحتاج إلى تفاوض تلقائي على وسيلة النقل (WebSockets, Long Polling).

ابدأ بـ SSE للحصول على خلاصات مباشرة بسيطة. وانتقل إلى SignalR فقط عندما يتطلب تطبيقك تفاعلاً أغنى.

ملاحظة: تتطلب MongoDB Change Streams مجموعة منسوجة (replica set) أو عنقوداً مجزأً (sharded cluster). فهي لا تعمل على خادم مستقل (standalone server).

المصدر: https://dev.to/mongodb/net-server-side-events-with-mongodb-change-streams-5dfb

مجتمع تعليمي اختياري: https://t.me/GyaanSetuAi