Client events
एक client event सीधे एक सब्सक्राइब्ड क्लाइंट से उसी चैनल पर मौजूद अन्य क्लाइंट्स तक पहुँचता है। आपका बैकएंड कॉपी तभी प्राप्त करता है जब आप उसे client-events webhook ग्रुप में सब्सक्राइब करते हैं।
Client events का उपयोग अल्पकालिक सिग्नलों के लिए करें जैसे टाइपिंग इंडिकेटर, कर्सर पोज़िशन, या ऐक्टिविटी हार्टबीट। ये आपके API से होकर राउंड ट्रिप से बचाते हैं।
Client events को आधिकारिक स्टेट के रूप में उपयोग न करें। Realtime edge उनके पेलोड को वैलिडेट नहीं करता, इसलिए प्राप्तकर्ता उनकी सामग्री पर भरोसा नहीं कर सकते। स्टोर किए गए चैट संदेश, स्टेट परिवर्तन और अनुमति-संवेदनशील कार्य अपने सर्वर के ज़रिए Publishing events से भेजें।
Client events सक्षम करें
Realtime apps पेज पर ऐप के लिए Client Events सक्षम करें। आप Realtime API के ज़रिए client_events को true पर भी सेट कर सकते हैं। यह सेटिंग पूरे ऐप पर लागू होती है। जब तक आप इसे सक्षम नहीं करते, Realtime edge client events को अस्वीकार करता है।
Client event आवश्यकताएँ
Realtime edge तीन नियम लागू करता है:
- नाम client- से शुरू होता है। यह आरक्षित प्रीफ़िक्स client events की पहचान करता है। क्लाइंट उन event नामों को अस्वीकार करते हैं जो इसे छोड़ देते हैं।
- चैनल private या presence होना चाहिए। पब्लिक चैनल अस्वीकार किया जाता है, और यही बात है: ऐप key आपके पेज में शिप होती है, इसलिए कोई भी पब्लिक चैनल को सब्सक्राइब करके उसमें लिखना शुरू कर सकता है। ऑथराइज़ेशन ही किसी क्लाइंट को ब्रॉडकास्ट के लिए भरोसेमंद बनाता है, और केवल private और presence चैनलों में यह होता है।
- भेजने वाला सब्सक्राइब्ड हो। कनेक्शन को पहले से उस चैनल पर होना चाहिए जिसमें वह trigger करता है, ताकि कोई क्लाइंट ऐसे रूम में न लिख सके जिसमें उसे कभी प्रवेश नहीं दिया गया।
यदि कोई event इनमें से किसी नियम का उल्लंघन करता है, तो edge कनेक्शन-स्तरीय error लौटाता है। डेवलपमेंट के दौरान error को bind करें:
bird.connection.bind("error", (e) => console.warn("edge refused:", e.message));bird.onError { error in
print("edge refused:", error.message)
}bird.onError { error ->
println("edge refused: ${error.message}")
}भेजना
import { BirdRealtime } from "@messagebird/realtime";
const bird = new BirdRealtime({
appKey: "your-app-key",
region: "us1",
authEndpoint: "/bird/auth",
});
const room = bird.subscribe("presence-room-1");
input.addEventListener("input", () => {
room.trigger("client-typing", { at: Date.now() });
});let room = bird.subscribe("presence-room-1")
// From whatever your UI calls on a keystroke.
func typingChanged() throws {
guard room.subscribed else { return }
try room.trigger("client-typing", data: ["at": Date().timeIntervalSince1970])
}val room = bird.subscribe("presence-room-1")
// From whatever your UI calls on a keystroke.
fun typingChanged() {
if (!room.subscribed) return
room.trigger("client-typing", buildJsonObject { put("at", System.currentTimeMillis()) })
}वैकल्पिक पेलोड एक स्ट्रिंग, ऑब्जेक्ट या ऐरे हो सकता है। trigger फ़्रेम भेजने के बाद true और चैनल सब्सक्राइब्ड न होने पर false लौटाता है। जुड़ने के तुरंत बाद भेजने के लिए bird:subscription_succeeded की प्रतीक्षा करें।
Swift और Kotlin पेलोड को अपनी भाषा के JSON वैल्यू के रूप में लेते हैं: Swift में JSONSerialization से एन्कोड किया गया Any?, Kotlin में JsonElement।
प्राप्त करना
आपने जो नाम भेजा, उसी चैनल पर, ठीक सर्वर-प्रकाशित event की तरह bind करें:
room.bind("client-typing", (data) => showTypingIndicator(data));room.bind("client-typing") { data in
showTypingIndicator(data)
}room.bind("client-typing") { data ->
showTypingIndicator(data)
}भेजने वाला कनेक्शन अपना event प्राप्त नहीं करता। एक ही व्यक्ति के अन्य कनेक्शन इसे प्राप्त करते हैं, इसलिए ज़रूरत पड़ने पर उन कॉपियों को फ़िल्टर करें।
दर सीमाएँ
प्रत्येक कनेक्शन प्रति सेकंड अधिकतम 10 client events भेज सकता है। यही सीमा ऐप के हर कनेक्शन पर लागू होती है।
जब कोई कनेक्शन सीमा पार करता है, तो edge event को छोड़ देता है और कनेक्शन बंद किए बिना error रिपोर्ट करता है। कनेक्शन के error event को bind करें और कर्सर मूवमेंट जैसे उच्च-आवृत्ति इनपुट को थ्रॉटल करें।
अपने सर्वर पर client events प्राप्त करें
अपने सर्वर पर client events प्राप्त करने के लिए, किसी endpoint को realtime.client_events ग्रुप में सब्सक्राइब करें। प्रत्येक webhook का type client event नाम में realtime. प्रीफ़िक्स जोड़ता है, इसलिए client-typing बन जाता है realtime.client-typing:
कोड उदाहरण
{
"data": {
"channel_name": "presence-room-1",
"event": "client-typing",
"data": "{\"at\":1785495600000}",
"connection_id": "26896.319537",
"member_id": "u_42"
},
"timestamp": "2026-07-31T09:00:00Z",
"type": "realtime.client-typing"
}member_id presence चैनलों के लिए दिखाई देता है और private चैनलों के लिए अनुपस्थित रहता है। कर्सर पोज़िशन जैसे उच्च-वॉल्यूम सिग्नल प्रति client event एक webhook उत्पन्न करते हैं। एन्वेलप, सिग्नेचर और अन्य ग्रुप के लिए Realtime webhooks देखें।
अगले कदम
- Realtime webhooks आपके अपने endpoint पर client events और चैनल ऐक्टिविटी प्राप्त करने को कवर करता है।
- Presence channels client events को एक सदस्य पहचान देते हैं, और उन्हें रेंडर करने के लिए सदस्य सूची प्रदान करते हैं।
- Publishing events सर्वर-साइड पथ है, उन सभी चीज़ों के लिए जिनके लिए क्लाइंट पर भरोसा नहीं किया जाना चाहिए।
संबंधित संसाधन
इस विषय के लिए डॉक्यूमेंटेशन, गाइड और उदाहरणों के साथ आगे बढ़ें। संसाधन अंग्रेज़ी में हैं।
क्षमता जानेंRealtimeलर्निंग पाथ फ़ॉलो करेंBuild your first integrationइम्प्लीमेंटेशन गाइडSend your first realtime event
अभ्यास करें और इम्प्लीमेंटेशन ब्रीफ़ पाएँ