प्रेज़ेंस चैनल
जिस चैनल का नाम presence- से शुरू होता है, वह प्राइवेट चैनल वाला ऑथराइज़ेशन इस्तेमाल करता है और उसमें सदस्य की पहचान भी जुड़ती है। आपका बैकएंड हर सब्सक्राइबर को एक member_id देता है। सब्सक्राइबर को मौजूदा सदस्य सूची मिलती है, और सदस्यों के जुड़ने या निकलने पर इवेंट मिलते हैं।
ऑनलाइन सूचियों, दस्तावेज़ देखने वालों, टाइपिंग संकेतकों या साझा कर्सर के लिए प्रेज़ेंस चैनल इस्तेमाल करें।
सब्सक्राइब करना
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 मिलता है। Kotlin हर इवेंट को JsonElement के रूप में देता है। दोनों क्लाइंट में मौजूदा सूची room.members से पढ़ें।
सब्सक्रिप्शन पूरा होने पर bird:subscription_succeeded फ़ायर होता है। उस समय room.members में मौजूदा सदस्य सूची होती है और room.myId में आपका member_id होता है। बाद के जुड़ने और निकलने वाले इवेंट लागू करने से पहले यह शुरुआती सूची दिखाएँ।
ऑथराइज़ेशन का तरीका प्राइवेट चैनल जैसा ही है, बस एक चीज़ अतिरिक्त है: आपका एंडपॉइंट member_data लौटाता है, जो member_id और वैकल्पिक member_info वाली एक JSON स्ट्रिंग है। एंडपॉइंट को ठीक उसी स्ट्रिंग पर हस्ताक्षर करना होगा। चैनल ऑथराइज़ करना देखें।
member_info को सुरक्षित तरीके से इस्तेमाल करें
चैनल के हर सदस्य को member_info मिलता है। इसमें केवल छोटा सार्वजनिक प्रोफ़ाइल डेटा रखें, जैसे दिखाया जाने वाला नाम या अवतार URL। ईमेल पते, ऑथराइज़ेशन भूमिकाएँ या कोई अन्य संवेदनशील डेटा न डालें।
आपका बैकएंड अपनी हस्ताक्षरित ऑथराइज़ेशन प्रतिक्रिया में member_id और member_info तय करता है। क्लाइंट सब्सक्रिप्शन का अनुरोध कर सकता है, लेकिन हस्ताक्षरित पहचान खुद नहीं चुन सकता।
सदस्य और कनेक्शन
एक सदस्य के कई कनेक्शन हो सकते हैं। उदाहरण के लिए, तीन खुले टैब से एक सदस्य और तीन कनेक्शन बनते हैं:
| क्या होता है | सदस्य इवेंट | चैनल कनेक्शन संख्या |
|---|---|---|
| पहला टैब सब्सक्राइब करता है | bird:member_added | 1 |
| दूसरा टैब सब्सक्राइब करता है | कोई नहीं | 2 |
| दूसरा टैब बंद होता है | कोई नहीं | 1 |
| आखिरी टैब बंद होता है | bird:member_removed | 0 |
room.members सत्रों को नहीं, पहचानों को दर्शाता है। प्रेज़ेंस चैनल bird:connection_count इवेंट नहीं भेजते। खुले कनेक्शनों की संख्या पढ़ने के लिए Connection counting चालू करें और अपने सर्वर से include=connection_count के साथ चैनल प्राप्त करें को कॉल करें। सदस्य सूची को अद्यतन रखने के लिए bird:member_added और bird:member_removed का उपयोग करें।
अपने सर्वर से प्रेज़ेंस पढ़ना
सर्वर की ओर से पढ़ने के दो तरीके हैं, और किसी के लिए भी सब्सक्रिप्शन ज़रूरी नहीं है:
- चैनल सदस्यों की सूची किसी प्रेज़ेंस चैनल पर इस समय सब्सक्राइब किए हुए
member_idमान लौटाता है। include=member_countके साथ चैनल प्राप्त करें बताता है कि कितने सदस्य मौजूद हैं, उनकी सूची दिए बिना।
member_count केवल प्रेज़ेंस चैनलों के लिए है। पब्लिक या प्राइवेट चैनल पर इसे माँगना वैलिडेशन त्रुटि है, क्योंकि उन चैनलों में सदस्य नहीं होते।
आप इसे पब्लिश करते समय भी माँग सकते हैं, जिससे हर लक्ष्य चैनल की उस क्षण की स्थिति लौटती है। इवेंट पब्लिश करना देखें।
अगले चरण
- चैनलों को अधिकृत करना में
member_dataऔर वह स्ट्रिंग बताई गई है जिस पर आपका बैकएंड हस्ताक्षर करता है। - निजी चैनल में वही प्राधिकरण होता है, लेकिन पहचान नहीं होती।
- इवेंट प्राप्तकर्ताओं को बाहर रखना किसी क्लाइंट को उसका अपना बदलाव प्राप्त करने से रोकता है।
संबंधित संसाधन
इस विषय के लिए दस्तावेज़, गाइड और उदाहरणों के साथ आगे बढ़ें।