किसी presence चैनल को सब्सक्राइब करें और मौजूदा रोस्टर सब्सक्रिप्शन के साथ आ जाता है, जिससे रूम खाली की बजाय भरा हुआ रेंडर होता है। उसके बाद, हर क्लाइंट को वही joins और leaves सुनाई देते हैं। आपका बैकएंड हर सदस्य को सब्सक्रिप्शन साइन करते समय उसकी पहचान देता है — यही सूची को भरोसेमंद बनाता है।
import type { Member } from "@messagebird/realtime";
const room = bird.subscribe("presence-room-42");
room.bind("bird:subscription_succeeded", () => {
// The roster is already here. Paint it before anyone moves.
render({ me: room.myId, members: [...room.members.values()] });
});
room.bind<Member>("bird:member_added", (member) => join(member.member_id));
room.bind<Member>("bird:member_removed", (member) => leave(member.member_id));
input.addEventListener("input", () => {
room.trigger("client-typing", { at: Date.now() });
});
सदस्य एक व्यक्ति है, सॉकेट नहीं।
तीन टैब एक ही सदस्य हैं।
Presence Bird Realtime API का हिस्सा है, और यह सेशन नहीं बल्कि पहचान गिनता है। कोई सदस्य सूची में तब जुड़ता है जब उसका पहला कनेक्शन सब्सक्राइब करता है और तब निकलता है जब उसका आखिरी कनेक्शन जाता है; बीच के टैब कुछ नहीं करते, इसलिए कोई डुप्लिकेट विंडो खोलने पर रोस्टर फ़्लिकर नहीं करता। अगर आपको सॉकेट काउंट चाहिए, तो वह एक अलग ऐप सेटिंग और अलग इवेंट है।
Presence आपको क्या देता है
रोस्टर, बदलाव, और दोनों को जोड़ने वाली पहचान। सब कुछ आपके बैकएंड द्वारा साइन किया हुआ।
- 01
रोस्टर, आते ही।
bird:subscription_succeeded मौजूदा सदस्य सूची लेकर आता है, इसलिए पहला पेंट असली रूम होता है। आप खाली स्थिति से सूची बनाने के बजाय joins और leaves उस पर लागू करते हैं।
- 02
पहचान जो आपके नियंत्रण में है।
आपका authorization endpoint एक member id और वैकल्पिक member info लौटाता है, और उसी स्ट्रिंग को साइन करता है। क्लाइंट सब्सक्राइब करने का अनुरोध कर सकता है लेकिन यह नहीं चुन सकता कि वह कौन है। member info में केवल छोटा सार्वजनिक प्रोफ़ाइल डेटा रखें जैसे डिस्प्ले नेम या अवतार: चैनल का हर सदस्य इसे प्राप्त करता है, और इसकी सीमा 1 KB है।
- 03
आपके सर्वर से रीड।
किसी चैनल के सदस्यों की सूची लें, या बिना सूची के member_count माँगें, सीधे API से। दोनों के लिए सब्सक्रिप्शन ज़रूरी नहीं, इसलिए बैकएंड बिना जुड़े बता सकता है कि रूम में कौन है। Member count केवल presence के लिए है; public या private चैनल पर इसे माँगना validation error है, क्योंकि उन चैनलों में सदस्य नहीं होते।
- 04
पीयर के बीच क्लाइंट इवेंट।
Presence चैनल उन दो जगहों में से एक है जहाँ क्लाइंट सीधे दूसरों को इवेंट भेज सकता है, इसलिए टाइपिंग इंडिकेटर और कर्सर पोज़िशन कभी आपके API को नहीं छूते। प्रति कनेक्शन प्रति सेकंड दस, और भेजने वाले को अपना इवेंट वापस नहीं मिलता।
- 05
कनेक्शन काउंट, जब आपको चाहिए।
Members बताते हैं कि यहाँ कौन है। Connection counting और connection count events चालू करें, और bird:connection_count बताता है कि चैनल पर कितने सॉकेट खुले हैं — यानी वह संख्या जिसमें तीन-टैब वाला व्यक्ति तीन का योगदान देता है।
सदस्य-संबोधित इवेंट
कभी-कभी गंतव्य एक व्यक्ति होता है, रूम नहीं।
साइन-इन सदस्य को सीधे संबोधित किया जा सकता है, बिना चैनल नाम और बिना सब्सक्रिप्शन authorize किए। एक कॉल उस पहचान के हर कनेक्शन तक पहुँचता है, हर टैब और डिवाइस पर, और किसी और तक नहीं, भले ही कोई अन्य सदस्य वही इवेंट नाम बाइंड करे। अगर उनका कोई लाइव कनेक्शन नहीं है तो भी कॉल सफल होता है: डिलीवरी क्यू नहीं होती, इसलिए नोटिफ़िकेशन स्टोर करें और वापस आने पर लोड करें। वही पहचान disconnect का लक्ष्य है जब सेशन तुरंत समाप्त करना हो।
// Address the person, not a channel. Every tab, every device.
await bird.realtime.members.send(APP_ID, "u_42", {
event: "order.shipped",
data: { order_id: "ord_123" },
});
// The roster, read from your server. No subscription needed.
const roster = await bird.realtime.channels.members(APP_ID, "presence-room-42");
// Password changed. Close every connection they hold.
await bird.realtime.members.disconnect(APP_ID, "u_42");
बडी लिस्ट रूम नहीं है।
Presence बताता है कि इस रूम में मेरे साथ कौन है। Watchlist events बताते हैं कि जिन लोगों की मुझे परवाह है वे कहीं ऑनलाइन हैं या नहीं। सदस्य की साइन की हुई पहचान 100 member id तक रख सकती है, और watchlist events सक्षम होने पर कनेक्शन को बताया जाता है जब उनमें से कोई ऑनलाइन या ऑफ़लाइन होता है, और साइन-इन के तुरंत बाद पूरी सूची की मौजूदा स्थिति मिलती है। चूँकि सूची साइन की हुई पहचान के अंदर होती है, आपका endpoint तय करता है कि कौन किसे देख सकता है। हर संबंध के लिए कोई चैनल नहीं, और जिन्हें देखा जा रहा है उन्हें साइन इन के अलावा कुछ नहीं करना।
डॉक्स में और गहराई से जानें।
Presence channels में रोस्टर, member info और सर्वर-साइड रीड शामिल हैं। Authorizing channels वह अनुबंध है जो आपका बैकएंड लागू करता है, sending events to a member member events की private channels से तुलना करता है, और watchlist events फ़ॉलो-लिस्ट वैरिएंट है।
व्यवहार में लाएँ।
इस विषय के लिए डॉक्यूमेंटेशन, गाइड और उदाहरणों के साथ आगे बढ़ें। संसाधन अंग्रेज़ी में हैं।
Realtime में और भी
एक ऐप, एक की पेयर। अन्य क्षमताएँ एक्सप्लोर करें।
रूम रेंडर करें, लोडिंग स्टेट नहीं।
प्रेज़ेंस, क्लाइंट इवेंट और मेंबर-एड्रेस्ड डिलीवरी हर Realtime ऐप के साथ आती है। फ्री प्लान में 100 समवर्ती कनेक्शन शामिल हैं।