Tempo real
Recursos ao vivo para o seu app: envie mensagens para todos em um canal, mostre quem está online e receba as alterações das linhas do seu banco de dados assim que acontecem.
Como funciona
- Seu app abre uma única conexão WebSocket com
espobase.realtime, usando a chave publicável do projeto. O token de acesso do usuário conectado é enviado automaticamente, nunca na URL. - Um canal é um nome que seu app escolhe, como
room-1. Todos que entram no mesmo canal do seu projeto compartilham as mensagens e a presença dele. - As alterações do banco de dados vêm das tabelas que você ativar. Cada alteração é lida de novo pela sua API REST como cada inscrito, então as regras de segurança da tabela decidem quem recebe qual linha.
1. Ative o tempo real em uma tabela
No painel, abra Tempo real (menu à esquerda) e ative a tabela. A tabela precisa de uma chave primária. Administradores e proprietários podem mudar isso; as mudanças ficam registradas no log de auditoria.
2. Receba as alterações das linhas
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 é INSERT, UPDATE, DELETE ou * (padrão). filter mantém apenas as linhas que correspondem a column=op.value (op: eq, neq, lt, lte, gt, gte). Adicione os listeners antes de join().
3. Broadcast e presença
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 doneAs mensagens de broadcast não são salvas. O estado de presença tem até 2 KB por cliente e é removido automaticamente quando o cliente se desconecta.
Segurança
- As alterações das linhas respeitam a segurança em nível de linha: cada inscrito recebe apenas as linhas que o usuário dele pode ler, no formato que a API REST retorna.
- As exclusões enviam apenas a chave primária da linha excluída (a linha não existe mais, então não pode ser verificada). Os filtros não se aplicam a exclusões.
- Os canais de broadcast e presença ficam abertos a qualquer pessoa com a sua chave publicável. Não envie dados privados por broadcast; use alterações do banco de dados protegidas por regras de segurança.
- Chaves secretas funcionam apenas em servidores (nunca em navegadores) e veem todas as alterações.
Limites
- Free: 200 conexões simultâneas por projeto, 2M de mensagens por mês. Quando as mensagens do mês acabam, o novo tráfego em tempo real é recusado até o próximo ciclo de faturamento.
- Pro: 500 conexões simultâneas por projeto, 5M de mensagens por mês.
- Group: 1.000 conexões simultâneas por projeto, 10M de mensagens por mês.
- Mensagens são o que os clientes recebem: broadcasts, atualizações de presença e alterações do banco de dados. Cada mensagem tem no máximo 64 KB; um cliente pode enviar até 50 mensagens por segundo e entrar em até 100 canais.