Aurabase-logo
aurabasisdocumenten
documenten›Gidsen›Realtime and presence (SDK)

Stuur live berichten en aanwezigheid met de JavaScript SDK

De dagelijkse stromen van aura.realtime, waarbij het gedrag van elke oproep wordt waargenomen tegen een lopende stapel.

7 min lezen·Niveau tussenproduct·Herzien op 12 okt 2026
Deze Engelse tekst is automatisch gegenereerd op basis van het Franse origineel en is nog niet beoordeeld.
De Engelse bron is sinds deze vertaling veranderd. Sommige informatie kan verouderd zijn.
Deze pagina is automatisch vertaald. De Engelse versie is gezaghebbend.
#
Kanalen

1. Kanalen en hun status

Een kanaal is een benoemde kamer. Clients die dezelfde naam openen, ontvangen elkaars berichten. De client maakt vanzelf verbinding wanneer u zich abonneert.

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

room.subscribe((status) => {
  // 'GEABONNEERD' | 'KANAAL_ERROR' | 'TIMED_OUT' | 'GESLOTEN'
  if (status === 'SUBSCRIBED') console.log('ready')
})

Alleen verzenden na SUBSCRIBED. Voordien, of na een weigering, retourneert send() een status zoals not_connected of requires_subscription in plaats van te verzenden. Kanalen zijn afgestemd op uw project: twee projecten kunnen dezelfde naam gebruiken zonder elkaar te zien.

#
Uitzending

2. Berichten uitzenden

broadcast.tstypescript
// Ontvang
room.on('broadcast', { event: 'ping' }, (message) => {
  console.log(message.payload) // {gebeurtenis: 'ping', n: 1, tekst: 'hallo' }
})

// Verzenden, zodra u zich abonneert
const status = await room.send({ type: 'broadcast', event: 'ping', payload: { n: 1, text: 'hello' } })
// → 'oké'

Tijdens een echte run ontving een tweede ingelogde client het bericht binnen twee seconden.

De payload bevat een event-sleutel

Het bericht dat u ontvangt, bevat de gebeurtenisnaam die aan de payload is toegevoegd: { "event": "ping", "n": 1, … }. Een payload met een eigen event-sleutel wordt geweigerd (channel.send geeft 'invalid_payload' terug, httpBroadcast geeft realtime_payload_event_reserved terug): hernoem de sleutel, bijvoorbeeld kind.

  • Je ontvangt standaard niet je eigen berichten. Open het kanaal met { config: { broadcast: { self: true } } } om ze te ontvangen.
  • Een bericht bevat id, topic, timestamp, event en payload.
#
Aanwezigheid

3. Aanwezigheid

Aanwezigheid laat zien wie verbonden is met een kanaal, met een door u gekozen status.

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() wordt gecodeerd op gebruikers-ID. Bij elk item worden de verbindingen van de gebruiker vermeld:

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() verwijdert je uit de lijst, en het verlaten van het kanaal of het sluiten van de pagina doet dat voor je.

#
Veranderingen

4. Databasewijzigingen

Projecten met een eigen database

postgres_changes werkt op projecten met een eigen database. Schakel eerst elke tabel in: PUT /v1/db/{project_id}/schema/tables/{table}/realtime met de body {"enabled": true} en een service_role-sleutel. Het luisteren begint zodra de eerste client zich abonneert en stopt enkele minuten nadat de laatste is vertrokken. Levering gebeurt minstens één keer: na een herstart van de server kan een wijziging twee keer aankomen, dus maak uw handler idempotent, bijvoorbeeld op basis van de primaire sleutel van de rij. Een druk cluster kan een nieuwe listener weigeren met een capaciteitsfout; probeer het kort daarna opnieuw. Geef het kanaal de naam van de tabel, db:public.<table>: op dat kanaal worden de wijzigingen gepubliceerd. De eerste abonnee kan tot 5 seconden aan wijzigingen ontvangen die vlak voor het abonneren zijn gedaan. Wijzigingen worden een uur bewaard voor herstel en daarna verwijderd. Is het cluster vol, dan mislukt het abonnement met capacité d'écoute postgres_changes atteinte pour la base de ce projet, réessayez. Blijft het luisteren langer dan een minuut weg, dan gaat het kanaal naar CHANNEL_ERROR; abonneer opnieuw zodra het hersteld is. Een storing die langer duurt dan het uur bewaring verliest de wijzigingen van die periode.

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')
  })
#
Opruimen

5. Opruimen

cleanup.tstypescript
room.unsubscribe()                 // laat één kanaal achter
aura.realtime.removeChannel(room)  // vertrek en vergeet het
aura.realtime.removeAllChannels()  // verlaat elk kanaal
aura.realtime.disconnect()         // sluit de verbinding

Bekijk de verbinding met aura.realtime.onStateChange(callback) en onError(callback). Na een onderbreking maakt de client vanzelf opnieuw verbinding, tenzij u setAutoReconnect(false) aanroept.

Laatst bijgewerkt · 12 okt 2026