MongoDB Change Streams کے ساتھ .NET 𝗦𝗲𝗿𝘃𝗲𝗿 𝗦𝗶𝗱𝗲 𝗘𝘃𝗲𝗻𝘁𝘀

آپ ASP.NET Core میں ریئل ٹائم اپ ڈیٹس چاہتے ہیں۔ آپ سب سے پہلے WebSockets کے بارے میں سوچ سکتے ہیں۔

ڈیش بورڈز اور فیڈز کے لیے ایک سادہ طریقہ موجود ہے۔ آپ MongoDB Change Streams اور Server-Sent Events (SSE) کا استعمال کر سکتے ہیں۔

یہ سیٹ اپ بہت کم کوڈ کے ساتھ آپ کے سرور سے کلائنٹ تک ون-وے (one-way) اسٹریمنگ فراہم کرتا ہے۔

یہ کیسے کام کرتا ہے:

  • MongoDB Change Streams ڈیٹا بیس کی تبدیلیوں کا فوری پتہ لگا لیتے ہیں۔
  • SSE ان تبدیلیوں کو ایک ہی HTTP کنکشن کے ذریعے براؤزر تک پہنچاتا ہے۔
  • آپ مسلسل پولنگ (polling) سے بچ جاتے ہیں، جس سے سرور کے وسائل بچتے ہیں۔

SSE ایک نیٹیو براؤزر API ہے۔ یہ ایک طویل مدتی (long-lived) HTTP رسپانس کے ذریعے کام کرتا ہے اور خودکار طریقے سے دوبارہ کنیکٹ (automatic reconnects) ہونے کی صلاحیت رکھتا ہے۔ یہ ان چیزوں کے لیے بہترین ہے:

  • لائیو ٹائم لائنز
  • نوٹیفیکیشنز
  • ایکٹیویٹی فیڈز
  • ایڈمن ڈیش بورڈز

ASP.NET Core Minimal APIs میں، آپ اسے TypedResults.ServerSentEvents کا استعمال کرتے ہوئے نافذ (implement) کر سکتے ہیں۔

کوڈ کا بہاؤ ان مراحل پر مشتمل ہے:

  1. آپ کی ایپ MongoDB میں ایک change stream cursor کھولتی ہے۔
  2. جب ڈیٹا تبدیل ہوتا ہے تو MongoDB ایونٹس جاری کرتا ہے۔
  3. آپ کی ایپ ان تبدیلیوں کو کلائنٹ تک پہنچاتی ہے۔

ایک بڑا فائدہ اسٹریمز کو دوبارہ شروع کرنے (resume) کی صلاحیت ہے۔ MongoDB ہر تبدیلی کے لیے ایک resume token فراہم کرتا ہے۔ آپ اس ٹوکن کو Last-Event-ID ہیڈر کے ذریعے پاس کر سکتے ہیں۔ جب براؤزر دوبارہ کنیکٹ ہوتا ہے، تو وہ آخری آئی ڈی (ID) بھیجتا ہے جو اس نے دیکھی تھی۔ آپ کی ایپ اس آئی ڈی کو پڑھتی ہے اور MongoDB کو بتاتی ہے کہ وہ بالکل وہیں سے شروع کرے جہاں سے اس نے چھوڑا تھا۔

آپ کو SSE کے مقابلے میں SignalR کب استعمال کرنا چاہیے؟

SSE کا استعمال کریں اگر:

  • آپ کو صرف سرور سے کلائنٹ تک اپ ڈیٹس کی ضرورت ہے۔
  • آپ ایک ہلکا پھلکا (lightweight) اور ٹیکسٹ پر مبنی سیٹ اپ چاہتے ہیں۔
  • آپ نیٹیو براؤزر APIs استعمال کرنا چاہتے ہیں۔

SignalR کا استعمال کریں اگر:

  • آپ کو دو طرفہ (bi-directional) مواصلات کی ضرورت ہے۔
  • آپ کو گروپس یا ہبز (hubs) جیسی پیچیدہ خصوصیات کی ضرورت ہے۔
  • آپ کو خودکار ٹرانسپورٹ نیگوشیشن (WebSockets, Long Polling) کی ضرورت ہے۔

سادہ لائیو فیڈز کے لیے SSE سے آغاز کریں۔ SignalR پر صرف تب منتقل ہوں جب آپ کی ایپ کو زیادہ بہتر اور پیچیدہ انٹرایکشن کی ضرورت ہو۔

نوٹ: MongoDB Change Streams کے لیے ریپلیکا سیٹ (replica set) یا شیارڈڈ کلسٹر (sharded cluster) کی ضرورت ہوتی ہے۔ یہ اسٹینڈ الون (standalone) سرور پر کام نہیں کرتے۔

Source: https://dev.to/mongodb/net-server-side-events-with-mongodb-change-streams-5dfb

Optional learning community: https://t.me/GyaanSetuAi