വെബ് പുഷ് നോട്ടിഫിക്കേഷനുകൾ ആന്തരികമായി എങ്ങനെ പ്രവർത്തിക്കുന്നു
പുതിയ സന്ദേശങ്ങൾ, ഓർഡർ അപ്ഡേറ്റുകൾ അല്ലെങ്കിൽ പേയ്മെന്റ് റിമൈൻഡറുകൾ എന്നിവയ്ക്കുള്ള നോട്ടിഫിക്കേഷനുകൾ നിങ്ങൾ കാണാറുണ്ട്.
ഇത് ലളിതമായി തോന്നാം. നിങ്ങളുടെ ബാക്കെൻഡ് ഒരു സന്ദേശം അയക്കുന്നു, ഉപയോക്താവ് അത് സ്വീകരിക്കുന്നു.
യഥാർത്ഥത്തിൽ, ഈ പ്രക്രിയയിൽ നിരവധി ഘടകങ്ങൾ ഉൾപ്പെടുന്നു. നിങ്ങളുടെ ബാക്കെൻഡ് ഒരിക്കലും ബ്രൗസറുമായി നേരിട്ട് ബന്ധപ്പെടുന്നില്ല. പകരം, അത് ഒരു Push Service ഉപയോഗിക്കുന്നു.
Google Chrome ഉപയോഗിക്കുന്നത് Firebase Cloud Messaging ആണ്. Firefox ഉപയോഗിക്കുന്നത് Mozilla Push Service ആണ്.
വർക്ക്ഫ്ലോ ഇപ്രകാരമാണ്:
Backend → Push Service → Browser → Service Worker → User
React, Golang എന്നിവ ഉപയോഗിച്ച് ഈ സിസ്റ്റം എങ്ങനെ നിർമ്മിക്കാം എന്ന് താഴെ നൽകുന്നു.
ഘടകങ്ങൾ
- Frontend (React): അനുമതി (permission) അഭ്യർത്ഥിക്കുകയും ഒരു Service Worker രജിസ്റ്റർ ചെയ്യുകയും ചെയ്യുന്നു.
- Service Worker: ബ്രൗസറിൽ പ്രവർത്തിക്കുന്ന ഒരു ബാക്ക്ഗ്രൗണ്ട് സ്ക്രിപ്റ്റ് ആണിത്. നിങ്ങളുടെ വെബ്സൈറ്റ് ക്ലോസ് ചെയ്താലും ഇത് ഇവന്റുകൾ കൈകാര്യം ചെയ്യുന്നു.
- Backend (Golang): സബ്സ്ക്രിപ്ഷനുകൾ സംഭരിക്കുകയും എൻക്രിപ്റ്റ് ചെയ്ത സന്ദേശങ്ങൾ അയക്കുകയും ചെയ്യുന്നു.
- Push Service: സന്ദേശം ബ്രൗസറിലേക്ക് എത്തിക്കുന്ന ഇടനിലക്കാരൻ.
സബ്സ്ക്രിപ്ഷൻ പ്രക്രിയ
ഒരു സന്ദേശം അയക്കുന്നതിന് നിങ്ങൾക്ക് ഒരു സബ്സ്ക്രിപ്ഷൻ ആവശ്യമാണ്.
- ഉപയോക്താവ് അനുമതി നൽകുന്നു.
- ഒരു എൻഡ്പോയിന്റും (endpoint) സെക്യൂരിറ്റി കീകുകളും അടങ്ങിയ ഒരു സബ്സ്ക്രിപ്ഷൻ ഒബ്ജക്റ്റ് ബ്രൗസർ നിർമ്മിക്കുന്നു.
- നിങ്ങളുടെ React ആപ്പ് ഈ ഒബ്ജക്റ്റ് നിങ്ങളുടെ Golang ബാക്കെൻഡിലേക്ക് അയക്കുന്നു.
- നിങ്ങളുടെ ബാക്കെൻഡ് ഇത് ഒരു ഡാറ്റാബേസിൽ സേവ് ചെയ്യുന്നു.
നിങ്ങളുടെ സെർവറിനെ തിരിച്ചറിയാൻ നിങ്ങൾ VAPID കീകൾ ഉപയോഗിക്കണം. ഫ്രണ്ട്എൻഡിനായി ഒരു പബ്ലിക് കീയും ബാക്കെൻഡിനായി ഒരു പ്രൈവറ്റ് കീയും ഉപയോഗിക്കുക. നിങ്ങളുടെ പ്രൈവറ്റ് കീ ഒരിക്കലും മറ്റൊരാളുമായി പങ്കിടരുത്.
നടപ്പിലാക്കുന്ന രീതി
React-ൽ, പുഷ് ഇവന്റുകൾക്കായി ഒരു Service Worker രജിസ്റ്റർ ചെയ്യുന്നു. ഈ വർക്കർ ബാക്ക്ഗ്രൗണ്ടിൽ പ്രവർത്തിക്കുന്നു. ഇത് ഡാറ്റ സ്വീകരിക്കുകയും ഉപയോക്താവിന് നോട്ടിഫിക്കേഷൻ കാണിക്കുകയും ചെയ്യുന്നു.
Golang-ൽ, എൻക്രിപ്ഷനും VAPID ഓതന്റിക്കേഷനും കൈകാര്യം ചെയ്യാൻ നിങ്ങൾ ഒരു ലൈബ്രറി ഉപയോഗിക്കുന്നു. നിങ്ങളുടെ സെർവർ ഡാറ്റാബേസിൽ നിന്ന് സബ്സ്ക്രിപ്ഷൻ വായിക്കുന്നു, പേലോഡ് (payload) എൻക്രിപ്റ്റ് ചെയ്യുന്നു, കൂടാതെ അത് ബ്രൗസർ പുഷ് സർവീസിലേക്ക് അയക്കുന്നു.
പ്രൊഡക്ഷനായി സ്കെയിലിംഗ് ചെയ്യുമ്പോൾ
ചെറിയ പ്രോജക്റ്റുകൾക്ക് ലളിതമായ ഒരു സെറ്റപ്പ് മതിയാകും. എന്നാൽ വലിയൊരു സിസ്റ്റത്തിന് കൂടുതൽ കാര്യങ്ങൾ ആവശ്യമാണ്.
- ഒന്നിലധികം ഉപകരണങ്ങൾ കൈകാര്യം ചെയ്യുക: ഒരു ഉപയോക്താവിന് ഫോണും ലാപ്ടോപ്പും ഉണ്ടാകാം. ഓരോ ഉപയോക്താവിനും ഒന്നിലധികം സബ്സ്ക്രിപ്ഷനുകൾ സംഭരിക്കുക.
- ഡാറ്റ ക്ലീൻ ചെയ്യുക: സബ്സ്ക്രിപ്ഷനുകൾ കാലാവധി തീരുന്നവയാണ്. നിങ്ങൾക്ക് 404 അല്ലെങ്കിൽ 410 എറർ ലഭിച്ചാൽ, ആ സബ്സ്ക്രിപ്ഷൻ നിങ്ങളുടെ ഡാറ്റാബേസിൽ നിന്ന് നീക്കം ചെയ്യുക.
- ക്യൂകൾ (Queues) ഉപയോഗിക്കുക: ദശലക്ഷക്കണക്കിന് ഉപയോക്താക്കൾക്കായി Kafka അല്ലെങ്കിൽ സമാനമായ ഒരു ടൂൾ ഉപയോഗിക്കുക. ഇത് നിങ്ങളുടെ സിസ്റ്റത്തിന് നോട്ടിഫിക്കേഷനുകൾ അസിൻക്രണസ് ആയി (asynchronously) പ്രോസസ്സ് ചെയ്യാൻ അനുവദിക്കുന്നു.
- റീട്രൈകൾ (retries) നടപ്പിലാക്കുക: നെറ്റ്വർക്ക് പരാജയങ്ങൾ കൈകാര്യം ചെയ്യാൻ exponential backoff ഉപയോഗിക്കുക.
ഉപയോക്താവ് ആക്ടീവ് ആയിരിക്കുമ്പോൾ ലൈവ് ചാറ്റുകൾക്ക് WebSockets നല്ലതാണ്. എന്നാൽ ടാബ് ക്ലോസ് ചെയ്തിരിക്കുമ്പോൾ ഉപയോക്താക്കളിലേക്ക് എത്താൻ Web Push ആണ് കൂടുതൽ അനുയോജ്യം.
