Transmita eventos ao vivo para navegadores e apps móveis conectados.
Envie atualizações de pedidos ao vivo, streams de tokens de agentes de IA, estado de salas colaborativas e notificações no app por canais pub/sub gerenciados, sem operar infraestrutura de WebSocket. Os canais são criados sob demanda quando um cliente se inscreve e fecham quando a última conexão sai, com os modos público, privado, de presença, criptografado e com cache definidos no próprio nome do canal.
channels.ts
4 inscritos4 inscritosconst 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());
Conexão 26896.319537
channels.ts
4 inscritos4 inscritosconst 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());
Conexão 26896.319537
channels.ts
4 inscritos4 inscritosconst 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());
Conexão 26896.319537
Defina o acesso e o comportamento da sala pelo prefixo do canal.
Crie salas sob demanda sem provisionar um registro de canais.
Na API Realtime da Bird API, sua aplicação roteia o tráfego ao vivo inscrevendo-se em um nome de canal que diferencia maiúsculas de minúsculas, com até 164 caracteres, em vez de criar salas previamente em um banco de dados. O prefixo do nome define o limite de segurança e de estado: um nome sem prefixo fica aberto a qualquer visitante, private- exige que seu backend autorize o assinante, presence- adiciona uma lista verificada de membros e private-encrypted- criptografa os payloads dos eventos de ponta a ponta. Como qualquer pessoa com sua chave pública do app pode entrar em canais públicos, mantenha identificadores de clientes e tenants em prefixos autorizados.
Escolha o modo de canal de acordo com o que você transmite.
Use a mesma conexão WebSocket e a mesma chamada de publicação no backend para transmissões públicas, feeds autenticados de clientes e salas colaborativas.
- 01
Canais públicos.
Transmita placares esportivos ao vivo, chegadas de transporte público, tickers de estoque ou atualizações de status do sistema para qualquer visitante, sem passar por um endpoint de autorização. Como qualquer pessoa com sua chave pública do app pode se inscrever, use nomes de tópicos genéricos como scores-live em vez de incluir IDs de clientes em nomes de canais públicos.
- 02
Canais privados.
Transmita rastreadores de pedidos pessoais, streams de tokens de agentes de IA, alertas de cobrança e notificações do espaço de trabalho por canais private-. Quando um navegador ou app móvel se inscreve, seu backend verifica a sessão do usuário e assina a inscrição com o segredo do seu app, para que conexões não autorizadas não possam escutar.
- 03
Canais de presença.
Crie listas de participantes de documentos colaborativos, barras de espectadores ao vivo e disponibilidade de filas de suporte em canais presence-. Seu servidor autoriza cada assinante e anexa um perfil de membro verificado, para que os clientes conectados recebam a lista de participantes ativos da sala e atualizações em tempo real de entradas e saídas.
- 04
Canais criptografados.
Proteja atualizações confidenciais de contas, notificações financeiras ou dados sigilosos do espaço de trabalho com canais private-encrypted-. Seu servidor cifra cada payload com uma chave mestra de 32 bytes que fica com você, e o texto cifrado passa pela borda do Realtime, enquanto os nomes de canais e eventos continuam visíveis para o roteamento.
- 05
Canais de cache.
Entregue o estado mais recente a quem entra depois e a clientes móveis que se reconectam, logo na inscrição, adicionando o prefixo cache-. O Realtime reenvia o último evento publicado com TTL de até 30 minutos e dispara um webhook de cache-miss quando o cache está vazio, para que seu servidor repopule um snapshot completo do estado.
Distribua eventos do backend para até 100 canais em uma única chamada.
Publique atualizações do seu backend ou de workers em segundo plano com uma solicitação HTTP padrão e deixe a Bird cuidar do fan-out via WebSocket para navegadores e dispositivos conectados. Uma única chamada pode transmitir um evento para até 100 canais (como o feed de uma partida ao vivo e seu canal gêmeo com cache) ou agrupar até 10 eventos distintos para salas diferentes. Você pode excluir a conexão da aba que originou a ação quando sua UI já aplicou uma atualização otimista, retornar contagens de conexões ou membros ao vivo na resposta da publicação e anexar uma chave de idempotência para que novas tentativas por falha de rede não entreguem eventos duplicados.
// 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);
}
Transmita indicadores de digitação e cursores ao vivo entre participantes.
Sinais efêmeros de UI, como indicadores de digitação, coordenadas do ponteiro ao vivo e destaques de seleção ativa, não precisam passar pelo seu backend. Quando você ativa eventos de cliente no seu app, assinantes autorizados em uma sala privada ou de presença podem transmitir eventos com prefixo client- diretamente aos outros participantes da sala, a até 10 mensagens por segundo por conexão. Exigir um canal autenticado impede que visitantes anônimos transmitam com sua chave pública do app e mantém os sinais de alta frequência entre participantes fora dos seus servidores de aplicação.
Combine fan-out de eventos com baixa latência e estado durável da aplicação.
A publicação de um evento é concluída assim que a borda do Realtime o aceita para fan-out assíncrono aos assinantes conectados naquele momento. Como os canais ao vivo enviam atualizações em trânsito em vez de armazenar uma fila de mensagens para dispositivos offline, mantenha os registros duráveis no seu banco de dados e use eventos publicados ou canais de cache para sincronizar as telas conectadas. Limites previsíveis valem para todos os planos: até 100 canais por publicação, 10 eventos por lote, 10 KB por payload de evento e nomes de canal com até 164 caracteres.
Aprofunde-se na documentação.
Leia a visão geral do Realtime para entender como canais, membros e conexões se relacionam. Siga os guias sobre publicação de eventos para fan-out em vários canais e exclusão de UI otimista, canais de cache para reenvio de estado a quem entra depois e recuperação de cache-miss, e consulta do estado de canais para verificar a ocupação das salas ao vivo pelo seu backend.
Continue construindo
com o Realtime.
Combine canais pub/sub com listas de usuários online ao vivo, controles de acesso assinados pelo servidor e webhooks de ciclo de vida no backend.
Presença
Exiba listas de usuários online ao vivo, elimine duplicidade de abas abertas pela identidade do usuário e envie mensagens diretamente a membros individuais.
→Segurança
Autorize inscrições em salas privadas no seu servidor, autentique conexões e criptografe payloads confidenciais de ponta a ponta.
→Webhooks
Acione fluxos no backend quando um canal passa a ser ocupado, fica vazio, muda a contagem de membros ou não encontra dados no cache.
→Escale sem
perder o controle.
Organize equipes em espaços de trabalho, controle o acesso à API e rastreie alterações nos logs de auditoria.
Organização
Harbor
O acesso permanece no espaço de trabalho.
Produção/Chaves de API
Backend portuário
AtivoAlex Lee
Admin
Hoje · UTC
Log de auditoria
Organização
Harbor
O acesso permanece no espaço de trabalho.
Produção/Chaves de API
Backend portuário
AtivoAlex Lee
Admin
Hoje · UTC
Log de auditoria
Organização
Harbor
O acesso permanece no espaço de trabalho.
Produção/Chaves de API
Backend portuário
AtivoAlex Lee
Admin
Hoje · UTC
Log de auditoria