इवेंट प्राप्तकर्ताओं को बाहर रखना
अगर कोई क्लाइंट आपके सर्वर के पब्लिश करने से पहले ही बदलाव को ऑप्टिमिस्टिक तरीके से लागू कर देता है, तो वही इवेंट मिलने पर बदलाव दो बार लागू हो सकता है। इससे स्क्रीन झिलमिला सकती है या कोई आइटम दोहराया जा सकता है।
बदलाव करने वाले क्लाइंट की कनेक्शन 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'));कनेक्शन ID प्राप्त करें
क्लाइंट अपनी कनेक्शन 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 में पास करें। यह फ़ील्ड किसी एक कनेक्शन तक डिलीवरी रोक सकती है, लेकिन किसी इवेंट तक पहुँच नहीं दे सकती।
बाहर रखे गए कनेक्शन का व्यवहार
सिर्फ़ नामित कनेक्शन बाहर रहता है। उसी व्यक्ति के दूसरे टैब अलग कनेक्शन इस्तेमाल करते हैं, इसलिए उन्हें इवेंट फिर भी मिलता है।
ऐसी कनेक्शन ID को बाहर रखना त्रुटि नहीं है जो सब्सक्राइब नहीं है या अब मौजूद नहीं है। पब्लिश बाकी सभी तक सामान्य रूप से पहुँचता है।
बहिष्करण कब छोड़ें
ऑप्टिमिस्टिक इंटरफ़ेस के लिए बहिष्करण का उपयोग करें। अगर क्लाइंट कोई बदलाव लागू करने से पहले इवेंट की प्रतीक्षा करता है, तो उसे बाहर न करें। ऐसा करने पर बदलाव करने वाला टैब पुरानी स्थिति में ही रह जाएगा।
अगले कदम
- इवेंट प्रकाशित करना प्रकाशन पेलोड के बाकी हिस्से को बताता है, जिसमें बैचिंग और ब्रॉडकास्टिंग शामिल हैं।
- प्रेज़ेंस चैनल बताते हैं कि एक सदस्य के कई कनेक्शन क्यों हो सकते हैं।
- इवेंट प्रकाशित करें इस अनुरोध का पूरा संदर्भ है।
संबंधित संसाधन
इस विषय के लिए दस्तावेज़, गाइड और उदाहरणों के साथ आगे बढ़ें।