पब/सब रियलटाइम API और वेबहुक में क्या अंतर है?

पब/सब किसी चैनल को सब्सक्राइब करने वाले क्लाइंट्स को इवेंट भेजता है, जबकि वेबहुक आपके सर्वर को एक HTTP अनुरोध भेजता है।

किसी ऑर्डर पेज को आपके डेटाबेस के साथ ही अपडेट की ज़रूरत हो सकती है। वेबहुक डेटाबेस में बदलाव शुरू कर सकता है। इसके बाद आपका सर्वर नतीजे वाली स्थिति को कनेक्टेड स्क्रीन पर पब्लिश कर सकता है।

Bird Realtime अपडेट WebSockets के ज़रिए पहुँचाता है।

चैनल, सदस्य और कनेक्शन क्या हैं?

चैनल सब्सक्रिप्शन को एक समूह में रखता है। कनेक्शन एक खुला WebSocket होता है। सदस्य एक प्रमाणित पहचान है, जिसे दूसरे सब्सक्राइबर भी देखते हैं।

प्रेज़ेंस चैनल यह बताता है कि कौन-से सदस्य सब्सक्राइब हैं। एक सदस्य कई कनेक्शन इस्तेमाल कर सकता है, जैसे ब्राउज़र के अलग-अलग टैब।

जब पहला कनेक्शन किसी चैनल को सब्सक्राइब करता है, तब Bird वह चैनल बनाता है, और आख़िरी कनेक्शन के निकलने पर उसे हटा देता है। आप सीधे चैनल के नाम पर प्रकाशित करते हैं। इसके लिए अलग से चैनल रिसोर्स बनाने की ज़रूरत नहीं होती।

हर कनेक्शन को एक पहचानकर्ता मिलता है। आपका बैकएंड निजी सब्सक्रिप्शन को मंज़ूरी देने के लिए इसका इस्तेमाल करता है। प्रकाशित करते समय आप उस कनेक्शन को बाहर रख सकते हैं, ताकि उसका अपना अपडेट उसी के पास वापस न पहुँचे।

अगर एक सदस्य तीन टैब खोलता है, तो वे टैब एक ही सदस्य पहचान के तहत तीन कनेक्शन बना सकते हैं। प्रेज़ेंस पहले कनेक्शन पर सदस्य के जुड़ने की सूचना देता है और आख़िरी कनेक्शन बंद होने के बाद उसके निकलने की। इसलिए बीच वाला टैब बंद करने पर वह सदस्य सूची से नहीं हटता।

कौन सब्सक्राइब कर सकता है?

चैनल के प्रीफ़िक्स से तय होता है कि किसी सब्सक्रिप्शन को आपके बैकएंड से अनुमति चाहिए या नहीं।

आप 1 से 164 वर्णों का Bird चैनल नाम चुनते हैं। इसमें अक्षर, अंक और _ - = @ , . ; इस्तेमाल किए जा सकते हैं। प्रीफ़िक्स भी इसी लंबाई में गिना जाता है, इसलिए उसे शामिल करके गिनें, ताकि अपने-आप बना निजी नाम सीमा के भीतर रहे।

नाम प्रीफ़िक्सपहुँच
कोई private या presence प्रीफ़िक्स नहींऐप कुंजी रखने वाले क्लाइंट के लिए सार्वजनिक।
private-आपका बैकएंड हर सब्सक्रिप्शन को मंज़ूरी देता है और उस पर हस्ताक्षर करता है।
presence-आपका बैकएंड सब्सक्रिप्शन को मंज़ूरी देता है और सब्सक्राइबर के साथ साझा की जाने वाली सदस्य पहचान देता है।
private-encrypted-निजी एक्सेस, जिसमें इवेंट की सामग्री आपके नियंत्रण वाली कुंजी से एन्क्रिप्ट होती है।

ऐप कुंजी क्लाइंट कोड में दिखाई देती है, इसलिए किसी सार्वजनिक चैनल का अस्पष्ट नाम गोपनीय डेटा की सुरक्षा नहीं करता। ऐप सीक्रेट अपने सर्वर पर रखें और सब्सक्रिप्शन की मंज़ूरियों पर हस्ताक्षर करने के लिए उसी का उपयोग करें।

निजी सब्सक्रिप्शन के लिए क्लाइंट अपना कनेक्शन पहचानकर्ता और चैनल का नाम आपके ऑथराइज़ेशन एंडपॉइंट पर भेजता है। हस्ताक्षर लौटाने से पहले आपका सर्वर एक्सेस की जाँच करता है। वह एंडपॉइंट केवल एक्सेस को अधिकृत करता है। वेबहुक की तरह उसे हर प्रकाशित इवेंट नहीं मिलता।

व्यवहार में इस अंतर का क्या मतलब है?

अपने सर्वर पर ऐसे काम के लिए वेबहुक का उपयोग करें जिसे विफल होने पर फिर से पूरा किया जा सके। कनेक्टेड क्लाइंट तक अपडेट पहुँचाने के लिए pub/sub का उपयोग करें।

Bird वेबहुक किसी इवेंट को आपके द्वारा चलाए जाने वाले HTTPS एंडपॉइंट पर भेजता है। फिर से प्रयास लगभग 27.5 घंटों तक चलते हैं। उनके बीच की प्रतीक्षा यादृच्छिक अंतर, रिसीवर पर अधिक भार और अनुरोधित देरी के अनुसार बदलती है। इस अवधि में आपके रिसीवर को ठीक होने का समय मिलता है। जो डिलीवरी फिर भी असफल रहती हैं, उन्हें असफल इवेंट के रीप्ले से वापस पाया जा सकता है।

Realtime चैनल आपके प्रकाशित इवेंट को सब्सक्राइब किए गए क्लाइंट तक भेजता है। डिस्कनेक्ट हुआ क्लाइंट उसे चूक सकता है। कैश चैनल किसी नए सब्सक्राइबर को अपना नवीनतम इवेंट तब तक दे सकता है, जब तक वह इवेंट कैश में रहता है। वह बीच के इवेंट का इतिहास नहीं रखता।

गोपनीय सर्वर-साइड प्रोसेसिंग को अपने वेबहुक रिसीवर के पीछे रखें। केवल वही स्थिति प्रकाशित करें जिसे चैनल के अधिकृत क्लाइंट देख सकते हैं।

वेबहुक इवेंट प्रकार Bird के कैटलॉग से आते हैं, जैसे email.delivered। Realtime में, प्रकाशित करते समय आप अपने ऐप्लिकेशन के इवेंट का नाम चुनते हैं। event नाम में 1 से 200 वर्ण हो सकते हैं। bird: और bird_internal: प्रीफ़िक्स आरक्षित हैं, इसलिए इनसे आपके ऐप्लिकेशन इवेंट का नाम नहीं रखा जा सकता।

क्लाइंट को सब्सक्रिप्शन की सफलता, सदस्यों में बदलाव और कनेक्शन की संख्या के बारे में प्रोटोकॉल इवेंट भी मिलते हैं। ये इवेंट आपके ऐप्लिकेशन के ऑर्डर या संदेश के बारे में नहीं, बल्कि स्वयं कनेक्शन या चैनल के बारे में बताते हैं।

मैं इन्हें एक साथ कैसे इस्तेमाल करूँ?

वेबहुक के संग्रहीत इवेंट के आधार पर कनेक्टेड क्लाइंट के लिए Realtime अपडेट भेजें।

बिज़नेस इवेंट को अपने सर्वर पर प्राप्त करें। प्रकाशित करने से पहले स्थायी स्थिति को अपडेट करें। फिर वह स्थिति प्रकाशित करें जिसकी कनेक्टेड क्लाइंट को ज़रूरत है।

ऑर्डर पेज के लिए, वेबहुक डेटाबेस अपडेट शुरू कर सकता है। इसके बाद आपका सर्वर ऑर्डर की अपडेट की गई स्थिति प्रकाशित करता है, ताकि ग्राहक का पेज रीफ़्रेश किए बिना बदल जाए।

डिस्कनेक्ट हुआ क्लाइंट प्रकाशन चूक सकता है, इसलिए दोबारा कनेक्ट होने के बाद भी डेटाबेस की वह स्थिति पढ़ने योग्य रखें। वेबहुक, पोलिंग या स्ट्रीमिंग रिकवरी के विकल्पों की तुलना करता है।

Realtime के अपने वेबहुक भी हैं, जो चैनल में मौजूदगी और सदस्यों के आने या जाने की सूचना देते हैं। इन्हें सार्वजनिक वेबहुक API के बजाय डैशबोर्ड से कॉन्फ़िगर करें।

Realtime का अवलोकन क्लाइंट कनेक्शन के बारे में बताता है। वेबहुक आपके सर्वर पर भेजे जाने वाले अनुरोधों के बारे में बताता है।

संक्षेप में

  1. एक चैनल के कई सब्सक्राइबर हो सकते हैं।

    वेबहुक अनुरोध एक पंजीकृत एंडपॉइंट पर जाता है। पब्लिश किया गया इवेंट उसके चैनल को सब्सक्राइब करने वाले क्लाइंट्स तक जाता है।

  2. प्राइवेट सब्सक्रिप्शन के लिए बैकएंड की मंज़ूरी चाहिए।

    ऐप कुंजी क्लाइंट कोड में दिखती है। प्राइवेट और प्रेज़ेंस प्रीफ़िक्स के लिए आपके सर्वर का सिग्नेचर ज़रूरी है।

  3. एक मेंबर के कई कनेक्शन हो सकते हैं।

    तीन टैब इस्तेमाल करने वाला मेंबर पहले कनेक्शन पर प्रेज़ेंस में जुड़ता है और आख़िरी कनेक्शन बंद होने के बाद निकलता है।

  4. डिलीवरी रिकवरी को कनेक्टेड व्यू के साथ मिलाएँ।

    सर्वर इवेंट के लिए वेबहुक रिकवरी का इस्तेमाल करें, और डिस्कनेक्ट होने के बाद Realtime व्यू को फिर से बनाने के लिए सहेजी गई स्थिति का।

उसी नेटवर्क पर बनाएँ।

एक टेस्ट API key आपको तुरंत मिल जाती है। भुगतान विधि जोड़ने और सेंडर सत्यापित करने पर प्रोडक्शन अनलॉक होता है।

आपका अगला आइडिया। जुड़ने के लिए तैयार।