इवेंट प्राप्तकर्ताओं को बाहर रखना
अगर कोई क्लाइंट आपके सर्वर द्वारा पब्लिश करने से पहले बदलाव को optimistically लागू कर देता है, तो वही इवेंट प्राप्त होने पर बदलाव दोबारा लागू हो सकता है। इससे फ़्लिकर या डुप्लिकेट आइटम बन सकता है।
कार्य करने वाले क्लाइंट की connection ID पास करें ताकि इवेंट बाकी सभी सब्सक्राइब्ड कनेक्शनों को डिलीवर हो।
await bird.realtime.publish(appId, {
event: "message.created",
channels: ["presence-room-1"],
data: { body: "hello" },
exclude_connection_id: "26896.319537",
});client.realtime.publish(
app_id,
event="message.created",
channels=["presence-room-1"],
data={"body": "hello"},
exclude_connection_id="26896.319537",
)_, err := client.Realtime.Publish(context.Background(), appID, bird.RealtimePublishParams{
Event: "message.created",
Channels: []string{"presence-room-1"},
Data: map[string]any{"body": "hello"},
ExcludeConnectionID: "26896.319537",
})$bird->realtime->publish($appId, (new RealtimePublish())
->setEvent('message.created')
->setChannels(['presence-room-1'])
->setData(['body' => 'hello'])
->setExcludeConnectionId('26896.319537'));Connection ID प्राप्त करें
क्लाइंट अपनी connection ID पढ़ता है और उसे उस रिक्वेस्ट के साथ भेजता है जो बदलाव ट्रिगर करती है:
const bird = new BirdRealtime({ appKey: "your-app-key", region: "us1" });
await fetch("/messages", {
method: "POST",
headers: { "content-type": "application/json" },
body: JSON.stringify({
body: "hello",
connection_id: bird.connection.connectionId,
}),
});let bird = BirdRealtime(options: .init(appKey: "your-app-key", region: "us1"))
var request = URLRequest(url: URL(string: "https://your-backend.example.com/messages")!)
request.httpMethod = "POST"
request.setValue("application/json", forHTTPHeaderField: "content-type")
request.httpBody = try JSONSerialization.data(withJSONObject: [
"body": "hello",
"connection_id": bird.connectionId ?? "",
])
_ = try await URLSession.shared.data(for: request)val bird = BirdRealtime(BirdRealtimeOptions(appKey = "your-app-key", region = "us1"))
// Send the client ID with the HTTP client your app already uses.
api.postMessage(body = "hello", connectionId = bird.connectionId)कनेक्शन स्थापित होने तक ID null रहती है और रीकनेक्ट के बाद बदल जाती है। रिक्वेस्ट करते समय ब्राउज़र में bird.connection.connectionId या Swift और Kotlin में bird.connectionId पढ़ें।
वैल्यू को अविश्वसनीय रिक्वेस्ट डेटा के रूप में वैलिडेट करने के बाद exclude_connection_id में पास करें। यह फ़ील्ड एक कनेक्शन को डिलीवरी रोक सकती है, लेकिन किसी इवेंट तक पहुँच नहीं दे सकती।
बाहर रखे गए कनेक्शन का व्यवहार
केवल नामित कनेक्शन को बाहर रखा जाता है। उसी व्यक्ति के अन्य टैब अलग कनेक्शन का उपयोग करते हैं और इवेंट प्राप्त करते रहते हैं।
ऐसी connection ID को बाहर रखना जो सब्सक्राइब नहीं है या अब मौजूद नहीं है, कोई त्रुटि नहीं है। पब्लिश सामान्य रूप से बाकी सभी को डिलीवर होता है।
एक्सक्लूज़न कब छोड़ें
एक्सक्लूज़न का उपयोग optimistic इंटरफ़ेस के लिए करें। अगर क्लाइंट बदलाव लागू करने से पहले इवेंट का इंतज़ार करता है, तो उसे बाहर न रखें। अन्यथा, कार्य करने वाला टैब पुराना बना रहेगा।
अगले कदम
- इवेंट पब्लिश करना पब्लिश पेलोड के बाकी हिस्सों को कवर करता है, जिसमें बैचिंग और ब्रॉडकास्टिंग शामिल हैं।
- Presence channels बताते हैं कि एक सदस्य के पास कई कनेक्शन क्यों हो सकते हैं।
- इवेंट पब्लिश करें रिक्वेस्ट का पूरा रेफ़रेंस है।
संबंधित संसाधन
इस विषय के लिए दस्तावेज़, गाइड और उदाहरणों के साथ आगे बढ़ें।