Envoyez des messages en direct et une présence avec le SDK JavaScript
Les flux quotidiens de aura.realtime, avec le comportement de chaque appel observé sur une pile en cours d'exécution.
1. Chaînes et leur statut
Un canal est une pièce nommée. Les clients qui ouvrent le même nom reçoivent les messages des autres. Le client se connecte tout seul lors de votre inscription.
Envoyez uniquement après SUBSCRIBED. Avant cela, ou après un refus, send() renvoie un statut tel que not_connected ou requires_subscription au lieu d'envoyer. Les chaînes sont limitées à votre projet : deux projets peuvent utiliser le même nom sans se voir.
2. Messages diffusés
Lors d'une exécution réelle, un deuxième client connecté a reçu le message en moins de deux secondes.
Le message reçu contient le nom de l’événement ajouté au payload : { "event": "ping", "n": 1, … }. Un payload qui porte lui-même une clé event est refusé (channel.send renvoie 'invalid_payload', httpBroadcast renvoie realtime_payload_event_reserved) : renommez la clé, par exemple kind.
- Vous ne recevez pas vos propres messages par défaut. Ouvrez la chaîne avec
{ config: { broadcast: { self: true } } }pour les recevoir. - Un message transporte
id,topic,timestamp,eventetpayload.
3. Présence
La présence indique qui est connecté à un canal, avec un état que vous choisissez.
presenceState() est saisi par identifiant utilisateur. Chaque entrée répertorie les connexions de l'utilisateur :
untrack() vous supprime de la liste et quitter la chaîne ou fermer la page le fait à votre place.
4. Modifications de la base de données
postgres_changes fonctionne sur les projets qui ont leur propre base de données. Activez d’abord chaque table : PUT /v1/db/{project_id}/schema/tables/{table}/realtime avec le corps {"enabled": true} et une clé service_role. L’écoute démarre quand le premier client s’abonne et s’arrête quelques minutes après le départ du dernier. La livraison est au moins une fois : après un redémarrage du serveur, un changement peut arriver deux fois ; rendez donc votre traitement idempotent, par exemple en vous appuyant sur la clé primaire de la ligne. Un cluster chargé peut refuser une nouvelle écoute avec une erreur de capacité ; réessayez un peu plus tard. Nommez le canal d’après la table, db:public.<table> : c’est sur ce canal que les changements sont publiés. Le premier abonné peut recevoir jusqu’à 5 secondes de changements faits juste avant son abonnement. Les changements sont conservés une heure pour la reprise, puis supprimés. Quand le cluster est plein, l’abonnement échoue avec capacité d'écoute postgres_changes atteinte pour la base de ce projet, réessayez. Si l’écoute reste perdue plus d’une minute, le canal passe en CHANNEL_ERROR ; réabonnez-vous une fois l’écoute rétablie. Une panne plus longue que l’heure de rétention perd les changements faits pendant celle-ci.
5. Nettoyer
Surveillez la connexion avec aura.realtime.onStateChange(callback) et onError(callback). Après une chute, le client se reconnecte tout seul sauf si vous appelez setAutoReconnect(false).