Envía mensajes en vivo y presencia con el SDK de JavaScript
Los flujos cotidianos de aura.realtime, con el comportamiento de cada llamada observado en una pila en ejecución.
1. Canales y su estado
Un canal es una sala con nombre. Los clientes que abren el mismo nombre reciben los mensajes de los demás. El cliente se conecta solo cuando te suscribes.
Enviar solo después de SUBSCRIBED. Antes de eso, o después de un rechazo, send() devuelve un estado como not_connected o requires_subscription en lugar de enviar. Los canales tienen como ámbito su proyecto: dos proyectos pueden usar el mismo nombre sin verse entre sí.
2. Mensajes de difusión
En una ejecución real, un segundo cliente que inició sesión recibió el mensaje en menos de dos segundos.
El mensaje que recibe lleva el nombre del evento añadido al payload: { "event": "ping", "n": 1, … }. Se rechaza un payload que tenga su propia clave event (channel.send devuelve 'invalid_payload', httpBroadcast devuelve realtime_payload_event_reserved): cambie el nombre de la clave, por ejemplo kind.
- No recibes tus propios mensajes de forma predeterminada. Abre el canal con
{ config: { broadcast: { self: true } } }para recibirlos. - Un mensaje transporta
id,topic,timestamp,eventypayload.
3. Presencia
Presencia muestra quién está conectado a un canal, con un estado que elijas.
presenceState() está codificado por ID de usuario. Cada entrada enumera las conexiones del usuario:
untrack() te elimina de la lista y dejar el canal o cerrar la página lo hace por ti.
4. Cambios en la base de datos
postgres_changes funciona en los proyectos que tienen su propia base de datos. Active primero cada tabla: PUT /v1/db/{project_id}/schema/tables/{table}/realtime con el cuerpo {"enabled": true} y una clave service_role. La escucha empieza cuando se suscribe el primer cliente y se detiene unos minutos después de que se vaya el último. La entrega es al menos una vez: tras un reinicio del servidor, un cambio puede llegar dos veces, así que haga que su manejador sea idempotente, por ejemplo usando la clave primaria de la fila. Un clúster ocupado puede rechazar una nueva escucha con un error de capacidad; vuelva a intentarlo en breve. Nombre el canal según la tabla, db:public.<table>: los cambios se publican en ese canal. El primer suscriptor puede recibir hasta 5 segundos de cambios hechos justo antes de suscribirse. Los cambios se conservan una hora para la recuperación y luego se eliminan. Cuando el clúster está lleno, la suscripción falla con capacité d'écoute postgres_changes atteinte pour la base de ce projet, réessayez. Si la escucha sigue perdida más de un minuto, el canal pasa a CHANNEL_ERROR; vuelva a suscribirse cuando se restablezca. Una interrupción más larga que la hora de retención pierde los cambios hechos durante ella.
5. Limpiar
Mire la conexión con aura.realtime.onStateChange(callback) y onError(callback). Después de una caída, el cliente se vuelve a conectar solo a menos que llame a setAutoReconnect(false).