ऑराबेस लोगो
aurabaseडॉक्स
डॉक्स›गाइड›Realtime and presence (SDK)

जावास्क्रिप्ट एसडीके के साथ लाइव संदेश और उपस्थिति भेजें

aura.realtime का दैनिक प्रवाह, प्रत्येक कॉल के व्यवहार के साथ जैसा कि एक रनिंग स्टैक के विरुद्ध देखा गया है।

7 मि॰ पढ़ें·स्तर मध्यवर्ती·12 अक्टू॰ 2026 पर संशोधित
यह अंग्रेजी पाठ फ़्रेंच मूल से स्वचालित रूप से उत्पन्न हुआ था और अभी तक इसकी समीक्षा नहीं की गई है।
इस अनुवाद के बाद से अंग्रेजी स्रोत बदल गया है। कुछ जानकारी पुरानी हो सकती है.
यह पृष्ठ स्वचालित रूप से अनुवादित किया गया था. अंग्रेजी संस्करण प्रामाणिक है.
#
चैनल

1. चैनल और उनकी स्थिति

चैनल एक नामित कमरा है. जो ग्राहक समान नाम खोलते हैं उन्हें एक-दूसरे के संदेश प्राप्त होते हैं। जब आप सदस्यता लेते हैं तो क्लाइंट अपने आप कनेक्ट हो जाता है।

channel.tstypescript
const room = aura.realtime.channel('room-1')

room.subscribe((status) => {
  // 'सब्सक्राइब्ड' | 'चैनल_त्रुटि' | 'TIMED_OUT' | 'बंद किया हुआ'
  if (status === 'SUBSCRIBED') console.log('ready')
})

SUBSCRIBED के बाद ही भेजें। उससे पहले, या इनकार के बाद, send() भेजने के बजाय not_connected या requires_subscription जैसी स्थिति लौटाता है। चैनल आपके प्रोजेक्ट के दायरे में हैं: दो प्रोजेक्ट एक-दूसरे को देखे बिना एक ही नाम का उपयोग कर सकते हैं।

#
प्रसारण

2. संदेश प्रसारित करें

broadcast.tstypescript
// प्राप्त करें
room.on('broadcast', { event: 'ping' }, (message) => {
  console.log(message.payload) // {घटना: 'पिंग', एन: 1, पाठ: 'हैलो' }
})

// एक बार सदस्यता लेने के बाद भेजें
const status = await room.send({ type: 'broadcast', event: 'ping', payload: { n: 1, text: 'hello' } })
// → 'ठीक है'

वास्तव में, एक दूसरे साइन-इन क्लाइंट को दो सेकंड के अंदर संदेश प्राप्त हुआ।

पेलोड में event कुंजी होती है

आपको मिलने वाले संदेश में इवेंट का नाम 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. उपस्थिति

उपस्थिति से पता चलता है कि आपके द्वारा चुने गए राज्य के साथ, चैनल से कौन जुड़ा है।

presence.tstypescript
const lobby = aura.realtime.channel('lobby', { config: { presence: { key: user.id } } })

lobby.on('presence', { event: 'sync' }, () => {
  console.log(lobby.presenceState())
})
lobby.subscribe(async (status) => {
  if (status === 'SUBSCRIBED') await lobby.track({ name: 'Bob' })
})

presenceState() को उपयोगकर्ता आईडी द्वारा कुंजीबद्ध किया जाता है। प्रत्येक प्रविष्टि उपयोगकर्ता के कनेक्शन सूचीबद्ध करती है:

presenceState()json
{
  "d6ba3994-…": [
    { "client_id": "936cb015-…", "user_id": "d6ba3994-…", "metadata": { "name": "Bob" },
      "joined_at": "2026-10-12T19:32:19.093Z", "last_seen": "2026-10-12T19:32:19.096Z" }
  ]
}

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 में चला जाता है; बहाल होने पर फिर से सब्सक्राइब करें। एक घंटे की अवधि से लंबी रुकावट के दौरान किए गए बदलाव खो जाते हैं।

changes.tstypescript
const changes = aura.realtime
  .channel('db:public.todos')
  .on('postgres_changes', { event: '*', schema: 'public', table: 'todos' }, (payload) => {
    console.log(payload.eventType, payload.new)
  })
  .subscribe((status) => {
    if (status === 'CHANNEL_ERROR') console.warn('database changes are not available for this project')
  })
#
साफ - सफाई

5. साफ़ करना

cleanup.tstypescript
room.unsubscribe()                 // एक चैनल छोड़ो
aura.realtime.removeChannel(room)  // छोड़ो और इसे भूल जाओ
aura.realtime.removeAllChannels()  // हर चैनल छोड़ो
aura.realtime.disconnect()         // कनेक्शन बंद करें

aura.realtime.onStateChange(callback) और onError(callback) के साथ कनेक्शन देखें। गिरावट के बाद, जब तक आप setAutoReconnect(false) पर कॉल नहीं करते, क्लाइंट अपने आप पुनः कनेक्ट हो जाता है।