वेब पुश नोटिफिकेशन आंतरिक रूप से कैसे काम करते हैं
आप नए संदेशों, ऑर्डर अपडेट या भुगतान रिमाइंडर के लिए नोटिफिकेशन देखते हैं।
यह सरल लगता है। आपका बैकएंड एक संदेश भेजता है और उपयोगकर्ता उसे प्राप्त करता है।
वास्तव में, इस प्रक्रिया में कई भाग शामिल होते हैं। आपका बैकएंड कभी भी सीधे ब्राउज़र से बात नहीं करता है। इसके बजाय, यह एक Push Service का उपयोग करता है।
Google Chrome, Firebase Cloud Messaging का उपयोग करता है। Firefox, Mozilla Push Service का उपयोग करता है।
वर्कफ़्लो इस प्रकार काम करता है:
Backend → Push Service → Browser → Service Worker → User
यहाँ बताया गया है कि आप React और Golang का उपयोग करके इस सिस्टम को कैसे बना सकते हैं।
घटक (The Components)
- Frontend (React): अनुमति मांगता है और एक Service Worker को रजिस्टर करता है।
- Service Worker: एक बैकग्राउंड स्क्रिप्ट जो ब्राउज़र में रहती है। यह तब भी इवेंट्स को हैंडल करती है जब आपकी वेबसाइट बंद हो।
- Backend (Golang): सब्सक्रिप्शन को स्टोर करता है और एन्क्रिप्टेड संदेश भेजता है।
- Push Service: वह बिचौलिया जो ब्राउज़र तक संदेश पहुँचाता है।
सब्सक्रिप्शन फ्लो (The Subscription Flow)
संदेश भेजने के लिए, आपको एक सब्सक्रिप्शन की आवश्यकता होती है।
- उपयोगकर्ता अनुमति देता है।
- ब्राउज़र एक सब्सक्रिप्शन ऑब्जेक्ट जेनरेट करता है जिसमें एक एंडपॉइंट और सुरक्षा कुंजियाँ (security keys) होती हैं।
- आपका React ऐप इस ऑब्जेक्ट को आपके Golang बैकएंड पर भेजता है।
- आपका बैकएंड इसे डेटाबेस में सेव करता है।
अपने सर्वर की पहचान करने के लिए आपको VAPID keys का उपयोग करना चाहिए। फ्रंटएंड के लिए पब्लिक की (public key) और बैकएंड के लिए प्राइवेट की (private key) का उपयोग करें। अपनी प्राइवेट की कभी भी साझा न करें।
कार्यान्वयन (The Implementation)
React में, आप पुश इवेंट्स को सुनने के लिए एक Service Worker को रजिस्टर करते हैं। यह वर्कर बैकग्राउंड में चलता है। यह डेटा प्राप्त करता है और उपयोगकर्ता को नोटिफिकेशन दिखाता है।
Golang में, आप एन्क्रिप्शन और VAPID ऑथेंटिकेशन को संभालने के लिए एक लाइब्रेरी का उपयोग करते हैं। आपका सर्वर डेटाबेस से सब्सक्रिप्शन पढ़ता है, पेलोड को एन्क्रिप्ट करता है, और इसे ब्राउज़र पुश सर्विस को भेजता है।
प्रोडक्शन के लिए स्केलिंग (Scaling for Production)
छोटे प्रोजेक्ट्स के लिए एक साधारण सेटअप काम करता है। एक बड़े सिस्टम को और अधिक की आवश्यकता होती है।
- कई डिवाइस को हैंडल करें: एक उपयोगकर्ता के पास फोन और लैपटॉप दोनों हो सकते हैं। प्रति उपयोगकर्ता कई सब्सक्रिप्शन स्टोर करें।
- डेटा साफ़ करें: सब्सक्रिप्शन एक्सपायर हो जाते हैं। यदि आपको 404 या 410 एरर मिलता है, तो उस सब्सक्रिप्शन को अपने डेटाबेस से हटा दें।
- Queues का उपयोग करें: लाखों उपयोगकर्ताओं के लिए, Kafka या इसी तरह के टूल का उपयोग करें। यह आपके सिस्टम को एसिंक्रोनस (asynchronously) रूप से नोटिफिकेशन प्रोसेस करने की अनुमति देता है।
- रिट्राइ (retries) लागू करें: नेटवर्क विफलताओं को संभालने के लिए exponential backoff का उपयोग करें।
जब उपयोगकर्ता सक्रिय होता है, तो लाइव चैट के लिए WebSockets अच्छे होते हैं। जब टैब बंद हो, तो उपयोगकर्ताओं तक पहुँचने के लिए Web Push बेहतर है।
