DOCUMENTAÇÃO

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.

← Toda a documentação

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 done

As 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.