Presence channels
जिस चैनल का नाम presence- से शुरू होता है, वह private-channel authorization का उपयोग करता है और सदस्य पहचान जोड़ता है। आपका बैकएंड हर सब्सक्राइबर को एक member_id असाइन करता है। सब्सक्राइबर को वर्तमान सदस्य सूची और सदस्यों के जुड़ने या छोड़ने पर इवेंट प्राप्त होते हैं।
Presence channels का उपयोग ऑनलाइन रोस्टर, डॉक्यूमेंट व्यूअर, टाइपिंग इंडिकेटर, या सहयोगी कर्सर के लिए करें।
सब्सक्राइब करना
const room = bird.subscribe("presence-room-1");
room.bind("bird:subscription_succeeded", () => {
console.log("me:", room.myId);
console.log("here now:", [...room.members.values()]);
});
room.bind("bird:member_added", (member) => console.log("joined", member.member_id));
room.bind("bird:member_removed", (member) => console.log("left", member.member_id));guard let room = bird.subscribe("presence-room-1") as? PresenceChannel else { return }
room.bind(BirdProtocol.Event.subscriptionSucceeded) { _ in
print("me:", room.myId ?? "")
print("here now:", room.members.keys)
}
room.bind(BirdProtocol.Event.memberAdded) { member in
print("joined", (member as? Member)?.memberId ?? "")
}
room.bind(BirdProtocol.Event.memberRemoved) { member in
print("left", (member as? Member)?.memberId ?? "")
}val room = bird.subscribe("presence-room-1")
if (room is PresenceChannel) {
room.bind(BirdProtocol.Event.SUBSCRIPTION_SUCCEEDED) {
println("me: ${room.myId}")
println("here now: ${room.members.keys}")
}
room.bind(BirdProtocol.Event.MEMBER_ADDED) { data ->
println("joined ${data?.jsonObject?.get("member_id")?.jsonPrimitive?.content}")
}
room.bind(BirdProtocol.Event.MEMBER_REMOVED) { data ->
println("left ${data?.jsonObject?.get("member_id")?.jsonPrimitive?.content}")
}
}Swift और Kotlin में, subscribe एक बेस चैनल टाइप लौटाता है। myId या members एक्सेस करने से पहले इसे PresenceChannel में कास्ट करें। Swift, bird:subscription_succeeded के लिए एक member map और join तथा leave इवेंट के लिए एक Member प्रदान करता है। Kotlin हर इवेंट को JsonElement के रूप में प्रदान करता है। दोनों क्लाइंट में, वर्तमान रोस्टर room.members से पढ़ें।
सब्सक्रिप्शन पूरा होने पर bird:subscription_succeeded फ़ायर होता है। उस समय room.members में वर्तमान रोस्टर होता है और room.myId में आपका member_id होता है। बाद के join और leave इवेंट लागू करने से पहले इस प्रारंभिक रोस्टर को रेंडर करें।
Authorization वही फ़्लो है जो private channel का है, एक अतिरिक्त बात के साथ: आपका endpoint member_data लौटाता है, जो एक JSON स्ट्रिंग है जिसमें member_id और वैकल्पिक member_info होता है, और इसे उसी स्ट्रिंग को साइन करना होगा। देखें चैनल authorize करना।
member_info को सुरक्षित रूप से उपयोग करें
हर चैनल सदस्य को member_info प्राप्त होता है। इसे छोटी सार्वजनिक प्रोफ़ाइल जानकारी जैसे display name या avatar URL के लिए उपयोग करें। ईमेल पते, authorization roles, या अन्य संवेदनशील डेटा शामिल न करें।
आपका बैकएंड अपने साइन किए हुए authorization रिस्पॉन्स में member_id और member_info असाइन करता है। क्लाइंट सब्सक्रिप्शन का अनुरोध कर सकता है लेकिन साइन की गई पहचान नहीं चुन सकता।
सदस्य और कनेक्शन
एक सदस्य के कई कनेक्शन हो सकते हैं। उदाहरण के लिए, तीन खुले टैब एक सदस्य और तीन कनेक्शन बनाते हैं:
| क्या होता है | सदस्य इवेंट | चैनल कनेक्शन काउंट |
|---|---|---|
| पहला टैब सब्सक्राइब करता है | bird:member_added | 1 |
| दूसरा टैब सब्सक्राइब करता है | कोई नहीं | 2 |
| दूसरा टैब बंद होता है | कोई नहीं | 1 |
| अंतिम टैब बंद होता है | bird:member_removed | 0 |
room.members सेशन के बजाय पहचान दर्शाता है। खुले कनेक्शन की संख्या प्राप्त करने के लिए, Connection counting और Connection count events सक्षम करें, फिर bird:connection_count बाइंड करें।
अपने सर्वर से presence पढ़ना
दो सर्वर-साइड रीड उपलब्ध हैं, और किसी के लिए भी सब्सक्रिप्शन आवश्यक नहीं है:
- चैनल सदस्यों की सूची वर्तमान में किसी presence channel पर सब्सक्राइब member_id वैल्यू लौटाता है।
- चैनल प्राप्त करें include=member_count के साथ यह लौटाता है कि कितने सदस्य उपस्थित हैं, बिना उन्हें सूचीबद्ध किए।
member_count केवल presence के लिए है। किसी public या private channel पर इसे माँगना एक validation error है, क्योंकि उन चैनलों में सदस्य नहीं होते।
आप पब्लिश करते समय भी इसका अनुरोध कर सकते हैं, जो उस समय हर लक्षित चैनल की स्थिति लौटाता है। देखें इवेंट पब्लिश करना।
अगले कदम
- चैनल authorize करना में member_data और वह स्ट्रिंग शामिल है जिसे आपका बैकएंड साइन करता है।
- Private channels वही authorization है, बिना पहचान के।
- इवेंट प्राप्तकर्ताओं को बाहर करना क्लाइंट को उसका अपना बदलाव प्राप्त करने से रोकता है।
संबंधित संसाधन
इस विषय के लिए डॉक्यूमेंटेशन, गाइड और उदाहरणों के साथ आगे बढ़ें। संसाधन अंग्रेज़ी में हैं।
क्षमता जानेंRealtimeलर्निंग पाथ फ़ॉलो करेंBuild your first integrationइम्प्लीमेंटेशन गाइडSend your first realtime event
अभ्यास करें और इम्प्लीमेंटेशन ब्रीफ़ पाएँ