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.
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.
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.
2. Broadcast-Nachrichten
Bei einem echten Durchlauf empfing ein zweiter angemeldeter Client die Nachricht in weniger als zwei Sekunden.
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,eventundpayload.
3. Präsenz
„Präsenz“ zeigt an, wer mit einem Kanal verbunden ist, mit einem von Ihnen gewählten Status.
presenceState() wird durch die Benutzer-ID verschlüsselt. Jeder Eintrag listet die Verbindungen des Benutzers auf:
untrack() entfernt Sie aus der Liste und das Verlassen des Kanals oder das Schließen der Seite erledigt dies für Sie.
4. Datenbankänderungen
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.
5. Aufräumen
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.