कैश चैनल
कैश चैनल अपना नवीनतम इवेंट याद रखता है और उसे हर नए सब्सक्राइबर को फिर से भेजता है। किसी अपडेट के बाद कनेक्ट होने वाला क्लाइंट अगले पब्लिश की प्रतीक्षा किए बिना वर्तमान स्थिति दिखा सकता है।
मैच का स्कोर, डिवाइस की स्थिति, बिल्ड की प्रगति या ऑर्डर की स्थिति जैसे वर्तमान मानों के लिए कैश चैनल का उपयोग करें। सब्सक्रिप्शन से प्रारंभिक स्थिति और बाद के अपडेट दोनों मिलते हैं।
कैश चैनल का नाम रखें
चैनल का नाम ही कैशिंग चालू करता है। नाम की शुरुआत में या उसके चैनल-प्रकार प्रीफ़िक्स के ठीक बाद cache- लगाएँ।
| नाम | कैश किया गया | सब्सक्रिप्शन |
|---|---|---|
cache-orders | हाँ | ऐप कुंजी रखने वाला कोई भी |
private-cache-orders | हाँ | आपका बैकएंड क्लाइंट के लिए हस्ताक्षर करता है |
presence-cache-lobby | हाँ | आपका बैकएंड हस्ताक्षर करता है, सदस्य ट्रैक होते हैं |
orders-cache | नहीं | ऐप कुंजी रखने वाला कोई भी |
orders-cache कैश चैनल नहीं है। किसी भी private- या presence- प्रीफ़िक्स के बाद नाम की शुरुआत में cache- प्रीफ़िक्स होना चाहिए।
चैनल की बाकी सभी बातें वैसी ही रहती हैं। private-cache- चैनल ठीक प्राइवेट चैनल की तरह अधिकृत होता है, और presence-cache- चैनल किसी भी अन्य प्रेज़ेंस चैनल की तरह सदस्यों को ट्रैक करता है और सदस्य इवेंट भेजता है।
सब्सक्राइब करना
const bird = new BirdRealtime({ appKey: "your-app-key", region: "us1" });
const match = bird.subscribe("cache-match-42");
match.bind("score-updated", (data) => {
render(data);
});
match.bind("bird:cache_miss", () => {
console.log("nothing cached for this channel yet");
});let bird = BirdRealtime(options: .init(appKey: "your-app-key", region: "us1"))
let match = bird.subscribe("cache-match-42")
match.bind("score-updated") { data in
render(data)
}
match.bind("bird:cache_miss") { _ in
print("nothing cached for this channel yet")
}val bird = BirdRealtime(BirdRealtimeOptions(appKey = "your-app-key", region = "us1"))
val match = bird.subscribe("cache-match-42")
match.bind("score-updated") { data ->
render(data)
}
match.bind("bird:cache_miss") {
println("nothing cached for this channel yet")
}हिट होने पर, सब्सक्रिप्शन सफल होने के बाद कैश किया गया इवेंट पहुँचता है। इसमें मूल इवेंट नाम और पेलोड होता है, इसलिए एक ही हैंडलर कैश किए गए और लाइव, दोनों तरह के इवेंट प्रोसेस करता है।
मिस होने पर, क्लाइंट को उस चैनल पर bird:cache_miss मिलता है। इसका मतलब है कि या तो चैनल पर कभी कोई इवेंट पब्लिश नहीं हुआ, या उसका कैश किया गया इवेंट समाप्त हो चुका है।
मिस होने पर कैश भरना
अगर कोई एंडपॉइंट realtime.cache_channels को सब्सक्राइब करता है, तो मिस की सूचना आपके सर्वर तक भी पहुँचती है। इस वेबहुक को संभालने के लिए वर्तमान स्थिति पढ़ें और उसे चैनल पर पब्लिश करें।
await bird.realtime.publish(appId, {
event: "score-updated",
channels: ["cache-match-42"],
data: await currentScore(42),
});client.realtime.publish(
app_id,
event="score-updated",
channels=["cache-match-42"],
data=current_score(42),
)_, err := client.Realtime.Publish(context.Background(), appID, bird.RealtimePublishParams{
Event: "score-updated",
Channels: []string{"cache-match-42"},
Data: currentScore(42),
})$bird->realtime->publish($appId, (new RealtimePublish())
->setEvent('score-updated')
->setChannels(['cache-match-42'])
->setData(currentScore(42)));जिस क्लाइंट की वजह से मिस हुआ, वह आपके सर्वर के नया इवेंट पब्लिश करने से पहले ही सब्सक्राइब हो चुका होता है, इसलिए उसे नई स्थिति मिल जाती है। यही प्रक्रिया खाली कैश को उसके पहले सब्सक्राइबर के लिए भी भरती है।
कैश की सामग्री और उसे रखने की अवधि
API के ज़रिए पब्लिश किए गए इवेंट कैश होते हैं, चाहे वे एक-एक करके पब्लिश हों या बैच में। जिन क्लाइंट इवेंट के नाम client- से शुरू होते हैं, वे कैश नहीं होते।
कैश किए गए इवेंट अधिकतम 30 मिनट तक उपलब्ध रह सकते हैं, लेकिन वे इससे पहले भी समाप्त हो सकते हैं। जिन चैनलों पर कभी-कभार ही अपडेट आते हैं, उनके लिए यह न मानें कि कैश अब भी भरा है; उन्हें कैश-मिस वेबहुक से दोबारा भरें।
हर चैनल केवल अपना सबसे हाल का इवेंट याद रखता है। अगर आप पहले score-updated और फिर match-ended पब्लिश करते हैं, तो नए सब्सक्राइबर को केवल match-ended मिलता है। हर कैश चैनल पर एक ही इवेंट नाम इस्तेमाल करें, या हर पेलोड में पूरी स्थिति शामिल करें।
कैश की सीमाएँ
कैश चैनल केवल सबसे हाल का इवेंट संग्रहीत करता है। वह इवेंट का इतिहास नहीं रखता। जो क्लाइंट ऑफ़लाइन रहते हुए दो अपडेट चूक जाता है, उसे नवीनतम स्थिति मिलती है, लेकिन बीच का इवेंट नहीं मिलता। स्थायी स्थिति अपने डेटाबेस में रखें। दोबारा कनेक्ट होने के बाद क्लाइंट फिर से सब्सक्राइब करता है और अगर कैश किया गया इवेंट अब भी उपलब्ध है, तो उसे दिखाता है। डिलीवरी की गारंटी के बारे में जानने के लिए इवेंट पब्लिश करना देखें।
अगले कदम
- इवेंट प्रकाशित करना में अपने सर्वर से प्रकाशित करना, बैचिंग और ब्रॉडकास्टिंग शामिल हैं।
- प्राइवेट चैनल और प्रेज़ेंस चैनल एक ही नाम में
cache-के साथ जोड़े जा सकते हैं। - चैनल की स्थिति क्वेरी करना आपके सर्वर से ऑक्यूपेंसी और गिनती पढ़ता है।
संबंधित संसाधन
इस विषय के लिए दस्तावेज़, गाइड और उदाहरणों के साथ आगे बढ़ें।