Um canal é um nome. Nada para provisionar.
Um canal existe assim que algo se inscreve nele e desaparece quando a última conexão sai. O nome define o tipo: public para qualquer coisa que um visitante possa ler, private para qualquer coisa restrita a um cliente, presence para uma sala com lista de membros e um prefixo cache para estado que um participante tardio precisa imediatamente.
const bird = new BirdRealtime({ appKey: APP_KEY, region: "us1" });
// Public: anyone holding the app key can subscribe.
const scores = bird.subscribe("match-42");
// Private: your backend signs every subscription.
const order = bird.subscribe("private-order-ord_123");
// Presence: private, plus an identity the room can see.
const room = bird.subscribe("presence-room-42");
// Cache: the latest event replays to whoever joins next.
const build = bird.subscribe("cache-build-8821");
build.bind("bird:cache_miss", () => showSkeleton());
O prefixo é a configuração.
Não existe registro de canais para manter sincronizado.
Canais são o modelo de endereçamento da Bird Realtime API. Você nunca cria um: você se inscreve em um nome, e os três primeiros caracteres desse nome dizem ao edge como tratá-lo. Um nome sem prefixo é público. private- pede que seu backend aprove cada inscrição. presence- faz o mesmo e anexa uma identidade. private-encrypted- sela o payload com uma chave que Bird nunca possui. Os nomes aceitam até 164 caracteres, diferenciam maiúsculas de minúsculas, e são a única parte de um canal que você deve pensar com cuidado, porque um nome público é visível para qualquer pessoa que tenha a app key.
Cinco tipos de sala.
Mesmo protocolo, mesmo cliente, mesma chamada de publish. O nome é o que muda.
- 01
Canais públicos.
Sem endpoint de autorização, sem registro. Qualquer pessoa com a app key pode se inscrever, o que os torna certos para resultados de build, placares ao vivo, informações de voo ou uma página de status, e errados para qualquer coisa restrita a um cliente. Mantenha identificadores fora do nome: orders não revela nada, orders-user-4821 revela que o user 4821 existe.
- 02
Canais privados.
Um nome private- roteia a inscrição pelo seu próprio endpoint, que verifica a sessão e assina o connection id e o nome do canal com o app secret. Suas regras, sua sessão, seu 403. O edge verifica a assinatura e nada mais chega ao canal.
- 03
Canais de presença.
Autorização de canal privado mais uma identidade, para que cada inscrito receba a lista de membros e saiba sobre chegadas e saídas. Este é o único tipo de canal com uma lista de membros.
- 04
Canais criptografados.
Um canal private-encrypted- carrega payloads que seu servidor sela com uma chave mestra de 32 bytes que nunca aparece em uma solicitação Realtime. O edge e tudo entre ele e o navegador veem texto cifrado. Nomes de canais e eventos permanecem em texto aberto, então escolha nomes que não revelem o que você está protegendo.
- 05
Canais de cache.
Comece o nome com cache-, após qualquer prefixo de tipo, e o canal lembra seu evento mais recente publicado via API e o reproduz para cada novo inscrito. A inscrição funciona também como fetch do estado inicial. Duas restrições que vale a pena considerar no design: apenas o evento mais recente é mantido, e ele pode expirar antes do limite de 30 minutos, então coloque o estado completo em cada payload e repopule a partir do webhook de cache-miss em vez de assumir que o cache está quente.
Um publish, até cem canais.
Publicar é uma chamada REST comum do seu servidor. Nomeie até 100 canais em uma solicitação e o edge distribui o evento para todos eles. Um batch carrega até 10 eventos independentes, cada um para seu próprio canal. Passe o connection id do cliente que está agindo como exclude_connection_id e a aba que já aplicou a mudança localmente é ignorada. Solicite contagens de conexões ou membros com include e a resposta informa o estado de cada canal no momento da publicação. Tente novamente com a mesma idempotency key e você não entregará duas vezes.
// One event, up to 100 channels, one request.
const result = await bird.realtime.publish(APP_ID, {
event: "score-updated",
channels: ["match-42", "cache-match-42"],
data: { home: 2, away: 1 },
// The tab that scored already rendered it locally.
exclude_connection_id: "26896.319537",
include: ["connection_count"],
});
for (const channel of result.data ?? []) {
console.log(channel.name, channel.connection_count);
}
Clientes podem conversar entre si diretamente.
Um indicador de digitação ou uma posição de cursor não precisa passar pela sua API. Habilite client events no app e um cliente inscrito pode disparar um evento chamado client-something direto para os outros no canal, limitado a 10 por segundo por conexão. Eles funcionam apenas em canais privados e de presença, e isso é intencional: a app key é enviada na sua página, então a autorização é o que torna um cliente confiável o bastante para transmitir. Trate o que chega como um sinal, nunca como estado autoritativo, porque o edge não valida o payload.
O que um canal vai e não vai lembrar.
Um publish retorna assim que o edge aceita o evento. A entrega é assíncrona, não há confirmação por cliente, e um cliente que cai durante a entrega não receberá o evento novamente ao reconectar. Esse é o contrato honesto, e é por isso que estado durável pertence ao seu banco de dados e eventos anunciam que ele mudou. Os limites são os mesmos em todos os planos: 100 canais por publish, 10 eventos por batch, 10 KB por payload, nomes de canal com 164 caracteres.
Aprofunde-se na documentação.
A visão geral do Realtime define canais, membros e conexões em uma página. Publicar eventos cobre broadcast, batch e exclusão, canais de cache explica o replay, e consultar o estado do canal é a leitura server-side para ocupação e contagens.
O restante do Realtime
Um app, um par de chaves. Explore as outras funcionalidades.
Escale sem
perder o controle.
Organize equipes em espaços de trabalho, controle o acesso à API e rastreie alterações nos logs de auditoria.
Registo de auditoria
Produção- Espaço de trabalho
- Produção
- Recurso
- Agente de envio
- Acesso de leituraLeitura e escrita