Realtime अवलोकन
Realtime कनेक्टेड क्लाइंट्स को WebSockets पर इवेंट पुश करता है। आपका सर्वर किसी नामित चैनल पर इवेंट पब्लिश करता है, और सब्सक्राइब किए हुए क्लाइंट्स उसे बिना पोलिंग के प्राप्त करते हैं।
Realtime का उपयोग उन बदलावों के लिए करें जो क्लाइंट को बिना दूसरा अनुरोध किए चाहिए, जैसे ऑर्डर अपडेट, चैट संदेश, डैशबोर्ड बदलाव, या पूरे हो चुके बैकग्राउंड जॉब।
चैनल, सदस्य, और कनेक्शन
तीन शब्द इस मॉडल का वर्णन करते हैं। ये एक-दूसरे की जगह उपयोग नहीं होते।
चैनल एक नामित रूम है। यह तब तक मौजूद रहता है जब तक कम से कम एक कनेक्शन सब्सक्राइब है, और आखिरी कनेक्शन जाने पर गायब हो जाता है। चैनल नामों में अधिकतम 164 अक्षर, अंक और ये कैरेक्टर अनुमत हैं: _ - = @ , . ;।
कनेक्शन एक खुला WebSocket है। कनेक्ट होने पर इसे एक ID (26896.319537) मिलती है। ऑथराइज़ेशन इस ID को साइन करता है, और पब्लिशिंग इसे डिलीवरी से बाहर रख सकती है।
सदस्य एक presence चैनल पर एक प्रमाणित पहचान है। एक सदस्य के पास कई कनेक्शन हो सकते हैं, जैसे तीन ब्राउज़र टैब। Presence इवेंट तब फ़ायर होते हैं जब सदस्य का पहला कनेक्शन जुड़ता है और आखिरी कनेक्शन छोड़ता है। बीच के टैब इन्हें उत्पन्न नहीं करते।
तीन चैनल प्रकार
चैनल-नाम का प्रीफ़िक्स चैनल प्रकार और उसका ऑथराइज़ेशन व्यवहार निर्धारित करता है।
| नाम | कौन सब्सक्राइब कर सकता है | सदस्य हैं |
|---|---|---|
| orders | ऐप की वाले कोई भी | नहीं |
| private-orders | केवल वे क्लाइंट जिन्हें आपका बैकएंड साइन करे | नहीं |
| presence-lobby | केवल वे क्लाइंट जिन्हें आपका बैकएंड साइन करे | हाँ |
public चैनल ऐप key रखने वाले किसी भी व्यक्ति द्वारा पढ़ा जा सकता है, जो क्लाइंट कोड में शिप होती है। केवल वही डेटा पब्लिश करें जो हर विज़िटर देख सकता हो। देखें Public channels।
private चैनल आपके बैकएंड से हर सब्सक्रिप्शन को अप्रूव करवाता है। क्लाइंट कनेक्शन ID और चैनल नाम आपके एंडपॉइंट पर पोस्ट करता है, जो ऐप secret से कम्प्यूट किया गया सिग्नेचर लौटाता है। देखें Private channels। private-encrypted-… चैनल आपके सर्वर पर रखी key से पेलोड को एन्क्रिप्ट भी करता है। देखें Encrypted channels।
presence चैनल private-channel ऑथराइज़ेशन में एक पहचान जोड़ता है। हर सब्सक्राइबर को सदस्य सूची और बदलाव member_id और वैकल्पिक member_info के ज़रिए मिलते हैं। देखें Presence channels।
क्लाइंट को मिलने वाले इवेंट
एप्लिकेशन इवेंट आपके हैं: आप पब्लिश करते समय नाम चुनते हैं (order-updated, message.created) और उस पर एक हैंडलर बाइंड करते हैं। इनके साथ, क्लाइंट bird: प्रीफ़िक्स के अंतर्गत लाइफ़साइकल इवेंट भी फिर से एमिट करता है, जिन्हें आप अपने इवेंट की तरह ही बाइंड करते हैं:
- bird:subscription_succeeded प्रत्येक चैनल पर सब्सक्रिप्शन लाइव होने पर एक बार फ़ायर होता है। presence चैनल पर यह मौजूदा सदस्य सूची साथ लाता है, ताकि आप किसी के आने-जाने से पहले रूम रेंडर कर सकें।
- bird:member_added और bird:member_removed presence चैनलों पर सदस्यों के आने और जाने पर फ़ायर होते हैं। member_added तब फ़ायर होता है जब किसी व्यक्ति का पहला कनेक्शन सब्सक्राइब करता है; member_removed तभी फ़ायर होता है जब उनका आखिरी कनेक्शन जाता है। दूसरा टैब खोलने और बंद करने पर कोई भी इवेंट उत्पन्न नहीं होता।
- bird:connection_count रिपोर्ट करता है कि चैनल पर कितने कनेक्शन सब्सक्राइब हैं, बशर्ते ऐप में कनेक्शन काउंटिंग और कनेक्शन काउंट इवेंट सक्षम हों। यह कनेक्शन गिनता है, इसलिए तीन टैब वाला सदस्य तीन गिना जाता है।
- bird:subscription_error तब फ़ायर होता है जब सब्सक्रिप्शन अस्वीकार हो जाती है, अक्सर इसलिए कि ऑथराइज़ेशन विफल हुआ।
client- से शुरू होने वाले नाम उन इवेंट के लिए आरक्षित हैं जो क्लाइंट सीधे एक-दूसरे को भेजते हैं; यह एक अलग ऐप सेटिंग है और केवल private तथा presence चैनलों पर अनुमत है।
आपका सर्वर भी इवेंट प्राप्त कर सकता है, webhooks के रूप में, जब कोई चैनल occupied या vacated होता है और जब सदस्य जुड़ते या छोड़ते हैं। ये realtime.* इवेंट के रूप में उन्हीं webhook एंडपॉइंट्स के ज़रिए आते हैं जिनसे शेष Bird आते हैं।
क्लाइंट्स
तीन क्लाइंट एक ही प्रोटोकॉल से इवेंट प्राप्त करते हैं। ब्राउज़र और Node.js के लिए @messagebird/realtime, iOS, macOS, और Linux के लिए BirdRealtime, या Android और सर्वर JVM के लिए com.messagebird:bird-realtime उपयोग करें। हर क्लाइंट सब्सक्रिप्शन, बाइंडिंग, presence, signin(), और क्लाइंट इवेंट सपोर्ट करता है।
ऐप secret अपने सर्वर पर ही रखें। Server SDK इसका उपयोग इवेंट पब्लिश करने, चैनल ऑथराइज़ करने और सदस्यों को डिस्कनेक्ट करने के लिए करते हैं।
ऐप्स, keys, और रीजन
ऐप एक पृथक वातावरण है जिसके अपने क्रेडेंशियल और अपना चैनल नेमस्पेस होता है। दो ऐप कभी एक-दूसरे के चैनल नहीं देख सकते, इसलिए ऐप आपके staging और production परिवेशों के बीच सही सीमा है।
हर ऐप निर्माण के समय चुने गए एक अपरिवर्तनीय रीजन का उपयोग करता है। स्वीकृत आइडेंटिफ़ायर प्राप्त करने के लिए List Realtime regions का उपयोग करें, और अपने उपयोगकर्ताओं के सबसे नज़दीकी रीजन चुनें।
हर ऐप में तीन मान होते हैं जिनके अलग-अलग उपयोग हैं:
- ऐप ID (rap_…) Bird API कॉल में ऐप की पहचान करता है और हर /v1/realtime/apps/… path में दिखता है।
- key सार्वजनिक है। ब्राउज़र इससे कनेक्ट करते हैं, और इसे क्लाइंट कोड में शिप करना सुरक्षित है।
- secret key के साथ जोड़ा बनाकर सर्वर-साइड कॉल प्रमाणित करता है और चैनल ऑथराइज़ेशन को साइन करता है। यह केवल एक बार, निर्माण के समय दिखाया जाता है। इसे रखने वाला कोई भी व्यक्ति आपके ऐप पर पब्लिश कर सकता है और presence पहचान जाली बना सकता है।
Realtime apps पेज पर ऐप्स प्रबंधित करें और keys रोटेट करें। दूसरी key बनाएँ, उसे डिप्लॉय करें, और फिर पुरानी key रिवोक करें।
दृश्यता
Realtime metrics पेज आपकी चयनित विंडो के लिए प्रति ऐप या पूरे वर्कस्पेस में तीन मान रिपोर्ट करता है:
- अधिकतम कनेक्शन विंडो के भीतर एक ही समय पर खुले कनेक्शनों की सबसे अधिक संख्या है। यह शिखर वह मान है जिस पर कनेक्शन सीमा लागू होती है।
- औसत कनेक्शन दैनिक शिखरों का माध्य है। यह हर सैंपल का औसत नहीं निकालता। जो वर्कस्पेस हर दोपहर स्पाइक करता है और रात भर निष्क्रिय रहता है, उसका औसत शांत घंटों से काफ़ी ऊपर दिखेगा।
- Messages इवेंट डिलीवरी गिनता है, प्रति चैनल एक: 50 चैनलों को नाम देने वाला एक पब्लिश 50 गिना जाता है। इसमें वे इवेंट भी शामिल हैं जो प्रोटोकॉल आपकी ओर से भेजता है, इसलिए presence join और कनेक्शन-काउंट अपडेट उसी संख्या में आते हैं, और इसी वजह से यह आपके कोड द्वारा किए गए पब्लिश से आगे चल सकता है।
उपयोग एक-मिनट बकेट में एकत्रित होता है, इसलिए हालिया ट्रैफ़िक दिखने में कई मिनट लग सकते हैं। उपयोग API फ़िलहाल केवल डैशबोर्ड पर उपलब्ध है। प्रोग्रामेटिक दृश्यता के लिए, अपने सिस्टम में पब्लिश रिकॉर्ड करें या realtime.* webhooks से गतिविधि निकालें।
प्लान और सीमाएँ
मुफ़्त प्लान में 100 समवर्ती कनेक्शन और प्रतिदिन 200,000 संदेश शामिल हैं, एक वर्कस्पेस के सभी ऐप्स में मिलाकर। अधिक ऐप बनाने से सीमा नहीं बढ़ती, क्योंकि यह वर्कस्पेस पर लागू होती है।
सशुल्क प्लान $25 प्रति माह से शुरू होते हैं, जिसमें 250 समवर्ती कनेक्शन और प्रतिदिन 500,000 संदेश होते हैं, और 30,000 कनेक्शन तथा प्रतिदिन 90 मिलियन संदेशों तक स्केल करते हैं। Realtime pricing हर चरण सूचीबद्ध करता है।
प्रति-अनुरोध सीमाएँ हर प्लान पर लागू होती हैं: एक पब्लिश अधिकतम 100 चैनलों को नाम दे सकता है, एक बैच में अधिकतम 10 इवेंट होते हैं, और एक इवेंट पेलोड अधिकतम 10 KB सीरियलाइज़्ड हो सकता है।
अगले कदम
- अपना पहला realtime इवेंट भेजें पूरे लूप को शुरू से अंत तक दिखाता है।
- इवेंट पब्लिश करना आपके सर्वर से पब्लिशिंग, बैचिंग, और मूल क्लाइंट को बाहर रखने को कवर करता है।
- चैनल ऑथराइज़ करना वह अनुबंध है जो आपका बैकएंड private और presence चैनलों के लिए लागू करता है।
संबंधित संसाधन
इस विषय के लिए डॉक्यूमेंटेशन, गाइड और उदाहरणों के साथ आगे बढ़ें। संसाधन अंग्रेज़ी में हैं।