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

നിങ്ങൾക്ക് ASP.NET Core-ൽ റിയൽ-ടൈം അപ്‌ഡേറ്റുകൾ ആവശ്യമാണ്. നിങ്ങൾ ആദ്യം WebSockets ആയിരിക്കാം ചിന്തിക്കുന്നത്.

ഡാഷ്‌ബോർഡുകൾക്കും ഫീഡുകൾക്കുമായി ഇതിനൊരു ലളിതമായ മാർഗമുണ്ട്. നിങ്ങൾക്ക് MongoDB Change Streams-ഉം Server-Sent Events (SSE)-ഉം ഉപയോഗിക്കാം.

വളരെ കുറഞ്ഞ കോഡ് ഉപയോഗിച്ച് നിങ്ങളുടെ സെർവറിൽ നിന്ന് ക്ലയന്റിലേക്ക് വൺ-വേ സ്ട്രീമിംഗ് (one-way streaming) നൽകാൻ ഈ സെറ്റപ്പ് സഹായിക്കുന്നു.

ഇത് എങ്ങനെ പ്രവർത്തിക്കുന്നു:

  • MongoDB Change Streams ഡാറ്റാബേസ് മാറ്റങ്ങൾ ഉടനടി കണ്ടെത്തുന്നു.
  • SSE ഒരു സിംഗിൾ HTTP കണക്ഷൻ വഴി ആ മാറ്റങ്ങൾ ബ്രൗസറിലേക്ക് എത്തിക്കുന്നു.
  • ഇത് നിരന്തരമായ പോളിംഗ് (polling) ഒഴിവാക്കുന്നു, അതുവഴി സെർവർ റിസോഴ്സുകൾ ലാഭിക്കാം.

SSE എന്നത് ഒരു നേറ്റീവ് ബ്രൗസർ API ആണ്. ഇത് ഒരു ലോംഗ്-ലിവിംഗ് (long-lived) HTTP റെസ്പോൺസിലൂടെ പ്രവർത്തിക്കുന്നു കൂടാതെ ഓട്ടോമാറ്റിക് റീകണക്റ്റുകളെ (automatic reconnects) പിന്തുണയ്ക്കുന്നു. ഇത് താഴെ പറയുന്നവയ്ക്ക് അനുയോജ്യമാണ്:

  • ലൈവ് ടൈംലൈനുകൾ
  • നോട്ടിഫിക്കേഷനുകൾ
  • ആക്ടിവിറ്റി ഫീഡുകൾ
  • അഡ്മിൻ ഡാഷ്‌ബോർഡുകൾ

ASP.NET Core Minimal APIs-ൽ, TypedResults.ServerSentEvents ഉപയോഗിച്ച് നിങ്ങൾക്ക് ഇത് നടപ്പിലാക്കാം.

കോഡ് ഫ്ലോ താഴെ പറയുന്ന ഘട്ടങ്ങളിലൂടെയാണ് കടന്നുപോകുന്നത്:

  1. നിങ്ങളുടെ ആപ്പ് MongoDB-യിൽ ഒരു ചേഞ്ച് സ്ട്രീം കർസർ (change stream cursor) തുറക്കുന്നു.
  2. ഡാറ്റ മാറുമ്പോൾ MongoDB ഇവന്റുകൾ പുറപ്പെടുവിക്കുന്നു.
  3. നിങ്ങളുടെ ആപ്പ് ഈ മാറ്റങ്ങളെ ക്ലയന്റിലേക്ക് മാപ്പ് ചെയ്യുന്നു.

സ്ട്രീമുകൾ പുനരാരംഭിക്കാനുള്ള (resume) കഴിവ് ഇതിന്റെ ഒരു പ്രധാന നേട്ടമാണ്. ഓരോ മാറ്റത്തിനും MongoDB ഒരു resume token നൽകുന്നു. നിങ്ങൾക്ക് ഈ ടോക്കൺ Last-Event-ID ഹെഡർ വഴി കൈമാറാം. ഒരു ബ്രൗസർ റീകണക്റ്റ് ചെയ്യുമ്പോൾ, അത് അവസാനമായി കണ്ട ID അയക്കുന്നു. നിങ്ങളുടെ ആപ്പ് ഈ ID വായിക്കുകയും എവിടെയാണോ നിർത്തിയത് അവിടെ നിന്ന് തുടങ്ങാൻ MongoDB-യോട് ആവശ്യപ്പെടുകയും ചെയ്യുന്നു.

എപ്പോഴാണ് SSE-യും SignalR-ഉം ഉപയോഗിക്കേണ്ടത്?

താഴെ പറയുന്ന സാഹചര്യങ്ങളിൽ SSE ഉപയോഗിക്കുക:

  • നിങ്ങൾക്ക് സെർവർ-ടു-ക്ലയന്റ് (server-to-client) അപ്‌ഡേറ്റുകൾ മാത്രം ആവശ്യമെങ്കിൽ.
  • നിങ്ങൾക്ക് ഭാരം കുറഞ്ഞ (lightweight), ടെക്സ്റ്റ് അധിഷ്ഠിത സെറ്റപ്പ് വേണമെങ്കിൽ.
  • നിങ്ങൾക്ക് നേറ്റീവ് ബ്രൗസർ API-കൾ ഉപയോഗിക്കണമെങ്കിൽ.

താഴെ പറയുന്ന സാഹചര്യങ്ങളിൽ SignalR ഉപയോഗിക്കുക:

  • നിങ്ങൾക്ക് ടു-വേ (bi-directional) കമ്മ്യൂണിക്കേഷൻ ആവശ്യമാണെങ്കിൽ.
  • ഗ്രൂപ്പുകൾ അല്ലെങ്കിൽ ഹബ്ബുകൾ പോലുള്ള സങ്കീർണ്ണമായ ഫീച്ചറുകൾ ആവശ്യമാണെങ്കിൽ.
  • ഓട്ടോമാറ്റിക് ട്രാൻസ്പോർട്ട് നെഗോഷ്യേഷൻ (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