Aurabase-Logo
AurabasisDokumente
Dokumente›Führer›Realtime and presence (SDK)

Senden Sie Live-Nachrichten und Anwesenheit mit dem JavaScript SDK

Die alltäglichen Abläufe von aura.realtime, wobei das Verhalten jedes Aufrufs anhand eines laufenden Stapels beobachtet wird.

7 Min. gelesen·Ebene Mittelstufe·Überarbeitet am 12.10.2026
Dieser englische Text wurde automatisch aus dem französischen Original generiert und wurde noch nicht überprüft.
Die englische Quelle hat sich seit dieser Übersetzung geändert. Einige Informationen sind möglicherweise veraltet.
Diese Seite wurde automatisch übersetzt. Maßgeblich ist die englische Version.
#
Kanäle

1. Kanäle und ihr Status

Ein Kanal ist ein benannter Raum. Clients, die denselben Namen öffnen, erhalten gegenseitig die Nachrichten. Wenn Sie ein Abonnement abschließen, stellt der Client selbständig eine Verbindung her.

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

room.subscribe((status) => {
  // 'ABONNENT' | 'CHANNEL_ERROR' | 'TIMED_OUT' | 'GESCHLOSSEN'
  if (status === 'SUBSCRIBED') console.log('ready')
})

Nur nach SUBSCRIBED senden. Davor oder nach einer Ablehnung gibt send() einen Status wie not_connected oder requires_subscription zurück, anstatt zu senden. Kanäle sind auf Ihr Projekt beschränkt: Zwei Projekte können denselben Namen verwenden, ohne sich gegenseitig zu sehen.

#
Ausstrahlung

2. Broadcast-Nachrichten

broadcast.tstypescript
// Empfangen
room.on('broadcast', { event: 'ping' }, (message) => {
  console.log(message.payload) // { event: 'ping', n: 1, text: 'hello' }
})

// Senden, sobald Sie sich angemeldet haben
const status = await room.send({ type: 'broadcast', event: 'ping', payload: { n: 1, text: 'hello' } })
// → 'ok'

Bei einem echten Durchlauf empfing ein zweiter angemeldeter Client die Nachricht in weniger als zwei Sekunden.

Die Nutzlast trägt einen event-Schlüssel

Die empfangene Nachricht enthält den Ereignisnamen, der dem payload hinzugefügt wird: { "event": "ping", "n": 1, … }. Ein Payload mit eigenem event-Schlüssel wird abgelehnt (channel.send gibt 'invalid_payload' zurück, httpBroadcast gibt realtime_payload_event_reserved zurück): Benennen Sie den Schlüssel um, zum Beispiel kind.

  • Sie erhalten standardmäßig keine eigenen Nachrichten. Öffnen Sie den Kanal mit { config: { broadcast: { self: true } } }, um sie zu empfangen.
  • Eine Nachricht trägt id, topic, timestamp, event und payload.
#
Präsenz

3. Präsenz

„Präsenz“ zeigt an, wer mit einem Kanal verbunden ist, mit einem von Ihnen gewählten 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() wird durch die Benutzer-ID verschlüsselt. Jeder Eintrag listet die Verbindungen des Benutzers auf:

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() entfernt Sie aus der Liste und das Verlassen des Kanals oder das Schließen der Seite erledigt dies für Sie.

#
Änderungen

4. Datenbankänderungen

Projekte mit eigener Datenbank

postgres_changes funktioniert bei Projekten mit eigener Datenbank. Aktivieren Sie zuerst jede Tabelle: PUT /v1/db/{project_id}/schema/tables/{table}/realtime mit dem Body {"enabled": true} und einem service_role-Schlüssel. Das Mithören beginnt, sobald sich der erste Client abonniert, und endet einige Minuten, nachdem der letzte gegangen ist. Die Zustellung erfolgt mindestens einmal: Nach einem Serverneustart kann eine Änderung zweimal ankommen. Gestalten Sie Ihren Handler daher idempotent, zum Beispiel über den Primärschlüssel der Zeile. Ein ausgelasteter Cluster kann einen neuen Listener mit einem Kapazitätsfehler ablehnen; versuchen Sie es kurz darauf erneut. Benennen Sie den Kanal nach der Tabelle, db:public.<table>: Auf diesem Kanal werden die Änderungen veröffentlicht. Der erste Abonnent kann bis zu 5 Sekunden an Änderungen erhalten, die kurz vor seinem Abonnement gemacht wurden. Änderungen werden eine Stunde für die Wiederaufnahme aufbewahrt und dann gelöscht. Ist der Cluster voll, schlägt das Abonnement mit capacité d'écoute postgres_changes atteinte pour la base de ce projet, réessayez fehl. Bleibt das Mithören länger als eine Minute aus, wechselt der Kanal zu CHANNEL_ERROR; abonnieren Sie erneut, sobald es wieder läuft. Ein Ausfall, der länger als die einstündige Aufbewahrung dauert, verliert die in dieser Zeit gemachten Änderungen.

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')
  })
#
Aufräumen

5. Aufräumen

cleanup.tstypescript
room.unsubscribe()                 // einen Kanal verlassen
aura.realtime.removeChannel(room)  // geh und vergiss es
aura.realtime.removeAllChannels()  // Verlasse jeden Kanal
aura.realtime.disconnect()         // Schließen Sie die Verbindung

Beobachten Sie die Verbindung mit aura.realtime.onStateChange(callback) und onError(callback). Nach einem Verbindungsabbruch stellt der Client die Verbindung selbst wieder her, es sei denn, Sie rufen setAutoReconnect(false) auf.

Zuletzt aktualisiert · 12.10.2026