क्लाइंट इवेंट
क्लाइंट इवेंट एक सब्सक्राइब किए गए क्लाइंट से उसी चैनल के अन्य क्लाइंट तक सीधे पहुँचता है। आपके बैकएंड को इसकी कॉपी तभी मिलती है, जब आप उसे client-events वेबहुक समूह से सब्सक्राइब करते हैं।
टाइपिंग संकेतक, कर्सर की स्थिति या गतिविधि हार्टबीट जैसे अल्पकालिक संकेतों के लिए क्लाइंट इवेंट का उपयोग करें। इनसे आपके API तक आने-जाने की ज़रूरत नहीं पड़ती।
क्लाइंट इवेंट को प्रामाणिक स्थिति के रूप में उपयोग न करें। Realtime एज इनके पेलोड की जाँच नहीं करता, इसलिए प्राप्तकर्ता इनकी सामग्री पर भरोसा नहीं कर सकते। सहेजे जाने वाले चैट संदेश, स्थिति में बदलाव और अनुमति पर निर्भर कार्रवाइयाँ इवेंट प्रकाशित करना के ज़रिए अपने सर्वर से भेजें।
क्लाइंट इवेंट सक्षम करें
Realtime ऐप्स पेज पर ऐप के लिए Client Events सक्षम करें। आप Realtime API के ज़रिए client_events को true पर भी सेट कर सकते हैं। यह सेटिंग पूरे ऐप पर लागू होती है। जब तक आप इसे सक्षम नहीं करते, Realtime एज क्लाइंट इवेंट अस्वीकार करता है।
क्लाइंट इवेंट की आवश्यकताएँ
Realtime एज तीन नियम लागू करता है:
- नाम
client-से शुरू होता है। यह आरक्षित प्रीफ़िक्स क्लाइंट इवेंट की पहचान करता है। जिन इवेंट नामों में यह नहीं होता, उन्हें क्लाइंट अस्वीकार कर देते हैं। - चैनल प्राइवेट या प्रेज़ेंस है। पब्लिक चैनल अस्वीकार किया जाता है, क्योंकि ऐप कुंजी आपके पेज में शामिल होती है, इसलिए कोई भी पब्लिक चैनल को सब्सक्राइब करके उस पर लिखना शुरू कर सकता है। ऑथराइज़ेशन से ही किसी क्लाइंट पर ब्रॉडकास्ट करने के लिए भरोसा किया जा सकता है, और यह केवल प्राइवेट और प्रेज़ेंस चैनलों में होता है।
- भेजने वाला सब्सक्राइब किया हुआ है। कनेक्शन को उस चैनल पर पहले से मौजूद होना चाहिए जिसमें वह इवेंट भेजता है, ताकि कोई क्लाइंट ऐसे रूम में न लिख सके जिसमें उसे कभी प्रवेश नहीं मिला।
अगर कोई इवेंट इनमें से किसी नियम को तोड़ता है, तो एज कनेक्शन-स्तर की त्रुटि लौटाता है। डेवलपमेंट के दौरान इस त्रुटि को बाइंड करें:
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।
प्राप्त करना
उसी चैनल पर वही नाम बाइंड करें जो आपने भेजा था, ठीक वैसे ही जैसे सर्वर से प्रकाशित इवेंट के लिए करते हैं:
room.bind("client-typing", (data) => showTypingIndicator(data));room.bind("client-typing") { data in
showTypingIndicator(data)
}room.bind("client-typing") { data ->
showTypingIndicator(data)
}भेजने वाले कनेक्शन को अपना इवेंट नहीं मिलता। उसी व्यक्ति के दूसरे कनेक्शनों को यह मिलता है, इसलिए ज़रूरत हो तो उन प्रतियों को फ़िल्टर करें।
दर सीमाएँ
हर कनेक्शन प्रति सेकंड अधिकतम 10 क्लाइंट इवेंट भेज सकता है। ऐप के हर कनेक्शन पर यही सीमा लागू होती है।
जब कोई कनेक्शन सीमा पार करता है, तो एज कनेक्शन बंद किए बिना इवेंट को छोड़ देता है और त्रुटि रिपोर्ट करता है। कनेक्शन के error इवेंट को बाइंड करें और कर्सर की हलचल जैसे बार-बार आने वाले इनपुट को थ्रॉटल करें।
अपने सर्वर पर क्लाइंट इवेंट प्राप्त करें
अपने सर्वर पर क्लाइंट इवेंट प्राप्त करने के लिए, किसी एंडपॉइंट को realtime.client_events समूह की सदस्यता दें। डिलीवरी type: "realtime.client_event" का उपयोग करती हैं। क्लाइंट इवेंट के नामों, जैसे client-typing, को अलग पहचानने के लिए data.event का उपयोग करें:
{
"data": {
"channel": "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_event"
}data.data एक JSON स्ट्रिंग है, जिसमें क्लाइंट का पेलोड होता है। वेबहुक का सत्यापन करने के बाद इसे पार्स करें। member_id प्रेज़ेंस चैनलों के लिए मौजूद रहता है और प्राइवेट चैनलों के लिए नहीं होता। कर्सर की स्थिति जैसे अधिक मात्रा वाले सिग्नल हर क्लाइंट इवेंट के लिए एक वेबहुक बनाते हैं। एनवेलप, सिग्नेचर और अन्य समूहों के लिए Realtime वेबहुक देखें।
अगले चरण
- Realtime वेबहुक में बताया गया है कि अपने एंडपॉइंट पर क्लाइंट इवेंट और चैनल गतिविधि कैसे प्राप्त करें।
- प्रेज़ेंस चैनल क्लाइंट इवेंट को सदस्य की पहचान देते हैं, और साथ में सदस्य सूची भी, जिसके आधार पर आप उन्हें दिखा सकते हैं।
- इवेंट प्रकाशित करना सर्वर-साइड तरीका है, उन सभी कामों के लिए जिनके लिए क्लाइंट पर भरोसा नहीं किया जाना चाहिए।
संबंधित संसाधन
इस विषय के लिए दस्तावेज़, गाइड और उदाहरणों के साथ आगे बढ़ें।