Tiempo real
Funciones en vivo para tu app: envía mensajes a todos en un canal, muestra quién está conectado y recibe los cambios de filas de tu base de datos en el momento.
Cómo funciona
- Tu app abre una sola conexión WebSocket con
espobase.realtime, usando la clave publicable del proyecto. El token de acceso del usuario que inició sesión se envía automáticamente, nunca en la URL. - Un canal es un nombre que elige tu app, como
room-1. Todos los que se unen al mismo canal de tu proyecto comparten sus mensajes y su presencia. - Los cambios de la base de datos vienen de las tablas que actives. Cada cambio se vuelve a leer a través de tu API REST como cada suscriptor, así que las reglas de seguridad de la tabla deciden quién recibe cada fila.
1. Activa el tiempo real en una tabla
En el panel, abre Tiempo real (menú de la izquierda) y activa la tabla. La tabla necesita una clave primaria. Los administradores y propietarios pueden cambiarlo; los cambios quedan en el registro de auditoría.
2. Escucha los cambios de filas
import { createClient } from "@espobase/client";
const espobase = createClient(PROJECT_URL, PUBLISHABLE_KEY);
const room = espobase.realtime
.channel("room-1")
.onChange("messages", (change) => {
// change.event: "INSERT" | "UPDATE" | "DELETE"
// change.record: the row (INSERT, UPDATE); change.old: the primary key (DELETE)
console.log(change.event, change.record ?? change.old);
}, { filter: "room_id=eq.1" });
await room.join();event es INSERT, UPDATE, DELETE o * (predeterminado). filter deja solo las filas que cumplen column=op.value (op: eq, neq, lt, lte, gt, gte). Agrega los listeners antes de join().
3. Mensajes y presencia
const room = espobase.realtime
.channel("room-1", { presence: { key: user.id } })
.onMessage("typing", (payload) => showTyping(payload))
.onPresence((online) => showOnline(Object.keys(online)));
await room.join();
await room.track({ name: user.name }); // who's here
await room.send("typing", { name: user.name }); // everyone else on the channel
await room.leave(); // when doneLos mensajes no se guardan. El estado de presencia es de hasta 2 KB por cliente y se elimina automáticamente cuando el cliente se desconecta.
Seguridad
- Los cambios de filas respetan la seguridad a nivel de fila: cada suscriptor recibe solo las filas que su usuario puede leer, con la forma en que las devuelve la API REST.
- Las eliminaciones envían solo la clave primaria de la fila eliminada (la fila ya no existe, así que no se puede comprobar). Los filtros no se aplican a las eliminaciones.
- Los canales de mensajes y presencia están abiertos a cualquiera que tenga tu clave publicable. No envíes datos privados por mensaje; usa cambios de la base de datos protegidos por reglas de seguridad.
- Las claves secretas solo funcionan desde servidores (nunca navegadores) y ven todos los cambios.
Límites
- Free: 200 conexiones simultáneas por proyecto, 2M de mensajes al mes. Cuando se agotan los mensajes del mes, el nuevo tráfico en tiempo real se rechaza hasta el siguiente ciclo de facturación.
- Pro: 500 conexiones simultáneas por proyecto, 5M de mensajes al mes.
- Group: 1,000 conexiones simultáneas por proyecto, 10M de mensajes al mes.
- Los mensajes son lo que reciben los clientes: mensajes de difusión, actualizaciones de presencia y cambios de la base de datos. Cada mensaje es de 64 KB como máximo; un cliente puede enviar hasta 50 mensajes por segundo y unirse a hasta 100 canales.