जावास्क्रिप्ट एसडीके के साथ लाइव संदेश और उपस्थिति भेजें
aura.realtime का दैनिक प्रवाह, प्रत्येक कॉल के व्यवहार के साथ जैसा कि एक रनिंग स्टैक के विरुद्ध देखा गया है।
1. चैनल और उनकी स्थिति
चैनल एक नामित कमरा है. जो ग्राहक समान नाम खोलते हैं उन्हें एक-दूसरे के संदेश प्राप्त होते हैं। जब आप सदस्यता लेते हैं तो क्लाइंट अपने आप कनेक्ट हो जाता है।
SUBSCRIBED के बाद ही भेजें। उससे पहले, या इनकार के बाद, send() भेजने के बजाय not_connected या requires_subscription जैसी स्थिति लौटाता है। चैनल आपके प्रोजेक्ट के दायरे में हैं: दो प्रोजेक्ट एक-दूसरे को देखे बिना एक ही नाम का उपयोग कर सकते हैं।
2. संदेश प्रसारित करें
वास्तव में, एक दूसरे साइन-इन क्लाइंट को दो सेकंड के अंदर संदेश प्राप्त हुआ।
आपको मिलने वाले संदेश में इवेंट का नाम payload में जोड़ा जाता है: { "event": "ping", "n": 1, … }। जिस payload में अपनी event कुंजी हो, उसे अस्वीकार कर दिया जाता है (channel.send 'invalid_payload' लौटाता है, httpBroadcast realtime_payload_event_reserved लौटाता है): कुंजी का नाम बदलें, जैसे kind।
- आपको डिफ़ॉल्ट रूप से अपने संदेश प्राप्त नहीं होते हैं। उन्हें प्राप्त करने के लिए
{ config: { broadcast: { self: true } } }के साथ चैनल खोलें। - एक संदेश में
id,topic,timestamp,eventऔरpayloadहोते हैं।
3. उपस्थिति
उपस्थिति से पता चलता है कि आपके द्वारा चुने गए राज्य के साथ, चैनल से कौन जुड़ा है।
presenceState() को उपयोगकर्ता आईडी द्वारा कुंजीबद्ध किया जाता है। प्रत्येक प्रविष्टि उपयोगकर्ता के कनेक्शन सूचीबद्ध करती है:
untrack() आपको सूची से हटा देता है, और चैनल छोड़ना या पेज बंद करना आपके लिए काम करता है।
4. डेटाबेस परिवर्तन
postgres_changes उन प्रोजेक्ट पर काम करता है जिनका अपना डेटाबेस है। पहले हर टेबल को सक्षम करें: PUT /v1/db/{project_id}/schema/tables/{table}/realtime, बॉडी {"enabled": true} और एक service_role कुंजी के साथ। सुनना तब शुरू होता है जब पहला क्लाइंट सब्सक्राइब करता है, और आख़िरी क्लाइंट के जाने के कुछ मिनट बाद रुक जाता है। डिलीवरी कम से कम एक बार होती है: सर्वर रीस्टार्ट के बाद कोई बदलाव दो बार आ सकता है, इसलिए अपने हैंडलर को idempotent बनाएँ, उदाहरण के लिए पंक्ति की प्राथमिक कुंजी के आधार पर। व्यस्त क्लस्टर क्षमता त्रुटि के साथ नए लिसनर को अस्वीकार कर सकता है; थोड़ी देर बाद फिर से प्रयास करें। चैनल का नाम टेबल के अनुसार रखें, db:public.<table>: बदलाव इसी चैनल पर प्रकाशित होते हैं। पहला सब्सक्राइबर सब्सक्राइब करने से ठीक पहले किए गए अधिकतम 5 सेकंड के बदलाव पा सकता है। बदलाव रिकवरी के लिए एक घंटे रखे जाते हैं, फिर हटा दिए जाते हैं। क्लस्टर भरा होने पर सब्सक्रिप्शन capacité d'écoute postgres_changes atteinte pour la base de ce projet, réessayez के साथ विफल होता है। सुनना एक मिनट से अधिक बंद रहे तो चैनल CHANNEL_ERROR में चला जाता है; बहाल होने पर फिर से सब्सक्राइब करें। एक घंटे की अवधि से लंबी रुकावट के दौरान किए गए बदलाव खो जाते हैं।
5. साफ़ करना
aura.realtime.onStateChange(callback) और onError(callback) के साथ कनेक्शन देखें। गिरावट के बाद, जब तक आप setAutoReconnect(false) पर कॉल नहीं करते, क्लाइंट अपने आप पुनः कनेक्ट हो जाता है।