Realtime चैनल

चैनल एक नाम है। प्रोविज़न करने की ज़रूरत नहीं।

जैसे ही कोई सब्सक्राइब करता है चैनल बन जाता है, और जब आख़िरी कनेक्शन छोड़ता है तो गायब हो जाता है। इसका नाम प्रकार तय करता है: public उसके लिए जो कोई भी विज़िटर पढ़ सके, private उसके लिए जो किसी ग्राहक तक सीमित हो, presence उस रूम के लिए जिसमें सदस्य सूची हो, और cache प्रीफ़िक्स उस स्थिति के लिए जो देर से जुड़ने वाले को तुरंत चाहिए।

channels.ts
4 subscribed
const bird = new BirdRealtime({ appKey: APP_KEY, region: "us1" });

// Public: anyone holding the app key can subscribe.
const scores = bird.subscribe("match-42");

// Private: your backend signs every subscription.
const order = bird.subscribe("private-order-ord_123");

// Presence: private, plus an identity the room can see.
const room = bird.subscribe("presence-room-42");

// Cache: the latest event replays to whoever joins next.
const build = bird.subscribe("cache-build-8821");

build.bind("bird:cache_miss", () => showSkeleton());

प्रीफ़िक्स ही कॉन्फ़िगरेशन है।

कोई चैनल रजिस्ट्री सिंक में रखने की ज़रूरत नहीं।

चैनल Bird Realtime API का एड्रेसिंग मॉडल हैं। आपको कभी कोई चैनल बनाना नहीं होता: आप एक नाम पर सब्सक्राइब करते हैं, और उस नाम के पहले तीन अक्षर एज को बताते हैं कि इसे कैसे ट्रीट करना है। बिना प्रीफ़िक्स वाला नाम public होता है। private- आपके बैकएंड से हर सब्सक्रिप्शन को अप्रूव करने के लिए कहता है। presence- वही करता है और एक आइडेंटिटी जोड़ता है। private-encrypted- पेलोड को ऐसी की से सील करता है जो Bird के पास कभी नहीं होती। नाम 164 अक्षरों तक हो सकते हैं, केस-सेंसिटिव होते हैं, और चैनल का वह एकमात्र हिस्सा हैं जिस पर आपको ध्यान से सोचना चाहिए, क्योंकि public नाम ऐप की रखने वाले किसी को भी दिखता है।

पाँच तरह के रूम।

वही प्रोटोकॉल, वही क्लाइंट, वही publish कॉल। बस नाम अलग होता है।

  1. 01

    Public चैनल।

    कोई ऑथराइज़ेशन एंडपॉइंट नहीं, कोई रजिस्ट्रेशन नहीं। ऐप की रखने वाला कोई भी सब्सक्राइब कर सकता है, जिससे ये बिल्ड रिज़ल्ट, लाइव स्कोर, फ़्लाइट जानकारी, या स्टेटस पेज के लिए सही हैं, और किसी एक ग्राहक तक सीमित चीज़ों के लिए ग़लत। नाम में आइडेंटिफ़ायर न रखें: orders कुछ नहीं बताता, orders-user-4821 बता देता है कि user 4821 मौजूद है।

  2. 02

    Private चैनल।

    private- नाम सब्सक्रिप्शन को आपके अपने एंडपॉइंट से रूट करता है, जो सेशन चेक करता है और कनेक्शन id तथा चैनल नाम को ऐप सीक्रेट से साइन करता है। आपके नियम, आपका सेशन, आपका 403। एज सिग्नेचर वेरिफ़ाई करता है और इसके अलावा कुछ भी चैनल तक नहीं पहुँचता।

  3. 03

    Presence चैनल।

    Private-चैनल ऑथराइज़ेशन के साथ एक आइडेंटिटी, ताकि हर सब्सक्राइबर को सदस्य सूची मिले और आगमन व प्रस्थान की जानकारी मिले। यह एकमात्र चैनल प्रकार है जिसमें रोस्टर होता है।

  4. 04

    Encrypted चैनल।

    private-encrypted- चैनल ऐसे पेलोड ले जाता है जिन्हें आपका सर्वर 32-बाइट मास्टर की से सील करता है जो कभी किसी Realtime रिक्वेस्ट में नहीं दिखती। एज और ब्राउज़र के बीच सब कुछ सिफ़रटेक्स्ट देखता है। चैनल और इवेंट नाम क्लियर टेक्स्ट में रहते हैं, इसलिए ऐसे नाम चुनें जो यह लीक न करें कि आप क्या सुरक्षित कर रहे हैं।

  5. 05

    Cache चैनल।

    नाम की शुरुआत में cache- लगाएँ, किसी भी टाइप प्रीफ़िक्स के बाद, और चैनल अपना नवीनतम API-published इवेंट याद रखता है और हर नए सब्सक्राइबर को रीप्ले करता है। सब्सक्रिप्शन ही इनिशियल स्टेट फ़ेच का काम करता है। डिज़ाइन में ध्यान रखने योग्य दो सीमाएँ: केवल सबसे हालिया इवेंट रखा जाता है, और वह 30 मिनट की सीमा से पहले एक्सपायर हो सकता है, इसलिए हर पेलोड में पूरी स्टेट रखें और cache-miss webhook से रीपॉपुलेट करें बजाय यह मानने के कि cache वॉर्म है।

एक publish, सौ चैनल तक।

Publishing आपके सर्वर से एक सामान्य REST कॉल है। एक रिक्वेस्ट में 100 चैनल तक नाम दें और एज इवेंट को सभी तक फैन-आउट करता है। एक बैच में 10 असंबंधित इवेंट होते हैं, हर एक अपने चैनल पर। ऐक्टिंग क्लाइंट की कनेक्शन id को exclude_connection_id के रूप में पास करें और वह टैब जिसने पहले से लोकली बदलाव लागू किया है, स्किप हो जाता है। include के साथ कनेक्शन या मेंबर काउंट माँगें और रिस्पॉन्स आपको publish के समय हर चैनल की स्थिति बताता है। उसी idempotency key के साथ फिर से प्रयास करें और आप डबल डिलीवरी नहीं करेंगे।

publish.ts
200 · accepted
// One event, up to 100 channels, one request.
const result = await bird.realtime.publish(APP_ID, {
  event: "score-updated",
  channels: ["match-42", "cache-match-42"],
  data: { home: 2, away: 1 },
  // The tab that scored already rendered it locally.
  exclude_connection_id: "26896.319537",
  include: ["connection_count"],
});

for (const channel of result.data ?? []) {
  console.log(channel.name, channel.connection_count);
}

क्लाइंट सीधे एक-दूसरे से बात कर सकते हैं।

टाइपिंग इंडिकेटर या कर्सर पोज़िशन को आपके API पर जाने की ज़रूरत नहीं। ऐप पर client events सक्षम करें और सब्सक्राइब्ड क्लाइंट client-something नाम का इवेंट सीधे चैनल के दूसरे सदस्यों को ट्रिगर कर सकता है, प्रति कनेक्शन प्रति सेकंड 10 की सीमा के साथ। ये केवल private और presence चैनलों पर काम करते हैं, और यह जानबूझकर है: ऐप की आपके पेज में शिप होती है, इसलिए ऑथराइज़ेशन ही वह चीज़ है जो क्लाइंट को ब्रॉडकास्ट के लिए भरोसेमंद बनाती है। जो आए उसे सिग्नल मानें, कभी भी आधिकारिक स्टेट नहीं, क्योंकि एज पेलोड को वैलिडेट नहीं करता।

चैनल क्या याद रखेगा और क्या नहीं।

publish तब लौटता है जब एज ने इवेंट स्वीकार कर लिया हो। डिलीवरी असिंक्रोनस है, कोई प्रति-क्लाइंट रसीद नहीं है, और जो क्लाइंट डिलीवरी के बीच में ड्रॉप होता है उसे रीकनेक्ट पर वह इवेंट फिर से नहीं भेजा जाएगा। यह ईमानदार कॉन्ट्रैक्ट है, और इसीलिए टिकाऊ स्टेट आपके डेटाबेस में होनी चाहिए और इवेंट बस यह बताते हैं कि वह बदली। सीमाएँ हर प्लान पर एक जैसी हैं: प्रति publish 100 चैनल, प्रति बैच 10 इवेंट, प्रति पेलोड 10 KB, 164-अक्षर चैनल नाम।

डॉक्स में और गहराई से जानें।

Realtime ओवरव्यू एक पेज में चैनल, मेंबर, और कनेक्शन को परिभाषित करता है। Publishing events ब्रॉडकास्ट, बैच, और एक्सक्लूज़न को कवर करता है, cache चैनल रीप्ले समझाता है, और चैनल स्टेट क्वेरी करना ऑक्यूपेंसी और काउंट के लिए सर्वर-साइड रीड है।

व्यवहार में लाएँ।

इस विषय के लिए डॉक्यूमेंटेशन, गाइड और उदाहरणों के साथ आगे बढ़ें। संसाधन अंग्रेज़ी में हैं।

अभ्यास करें और इम्प्लीमेंटेशन ब्रीफ़ पाएँ

एक नाम सब्सक्राइब करें और पब्लिश करना शुरू करें।

एक ऐप बनाएँ, पब्लिक की को अपने क्लाइंट में शिप करें, और सीक्रेट को अपने सर्वर पर रखें। फ्री प्लान में 100 समवर्ती कनेक्शन शामिल हैं।

एक चैनल से शुरुआत करें।
तैयार होने पर बाकी जोड़ें।

एक test API key तुरंत आपकी है। जब आप payment method जोड़ते हैं और sender verify करते हैं, तब production अनलॉक हो जाता है।

Claude Code, Cursor या Codex इस्तेमाल कर रहे हैं? एक setup prompt कॉपी करें और आपका agent आपके लिए Bird CLI और skills इंस्टॉल कर देगा। अपना चुनें:

Cursor