Transmite eventos en vivo a navegadores y apps móviles conectados.
Envía actualizaciones de pedidos en vivo, flujos de tokens de agentes de IA, el estado de salas colaborativas y notificaciones in-app mediante canales pub/sub gestionados, sin operar infraestructura WebSocket. Los canales se crean bajo demanda cuando un cliente se suscribe y se cierran cuando sale la última conexión, con los modos público, privado, de presencia, cifrado y de caché integrados en el nombre del canal.
channels.ts
4 suscritos4 suscritosconst 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());
Conexión 26896.319537
channels.ts
4 suscritos4 suscritosconst 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());
Conexión 26896.319537
channels.ts
4 suscritos4 suscritosconst 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());
Conexión 26896.319537
Define el acceso y el comportamiento de la sala con el prefijo del canal.
Crea salas bajo demanda sin aprovisionar un registro de canales.
Con la API Realtime de Bird, tu aplicación enruta el tráfico en vivo suscribiéndose a un nombre de canal que distingue mayúsculas y minúsculas, de hasta 164 caracteres, en lugar de crear salas previamente en una base de datos. El prefijo del nombre fija el límite de seguridad y de estado: un nombre sin prefijo está abierto a cualquier visitante, private- exige que tu backend autorice al suscriptor, presence- añade una lista verificada de miembros y private-encrypted- cifra las cargas de los eventos de extremo a extremo. Como cualquiera puede unirse a los canales públicos con tu clave pública de app, usa prefijos autorizados para los identificadores de clientes e inquilinos.
Elige el modo de canal según lo que transmites.
Usa la misma conexión WebSocket y la misma llamada de publicación del backend para difusiones públicas, feeds autenticados de clientes y salas colaborativas.
- 01
Canales públicos.
Difunde resultados deportivos en vivo, llegadas de transporte, indicadores de inventario o actualizaciones de estado del sistema a cualquier visitante sin pasar por un endpoint de autorización. Como cualquiera con tu clave pública de app puede suscribirse, usa nombres de tema genéricos como scores-live en lugar de incluir IDs de clientes en los nombres de canales públicos.
- 02
Canales privados.
Transmite seguimientos personales de pedidos, flujos de tokens de agentes de IA, alertas de facturación y notificaciones del espacio de trabajo por canales private-. Cuando un navegador o una app móvil se suscribe, tu backend comprueba la sesión del usuario y firma la suscripción con el secreto de tu app, para que las conexiones no autorizadas no puedan escuchar.
- 03
Canales de presencia.
Crea listas de colaboradores en documentos, barras de espectadores en vivo y la disponibilidad de colas de soporte con canales presence-. Tu servidor autoriza a cada suscriptor y adjunta un perfil de miembro verificado, así los clientes conectados reciben la lista de la sala activa y las entradas y salidas en tiempo real.
- 04
Canales cifrados.
Protege actualizaciones de cuentas sensibles, notificaciones financieras o datos confidenciales del espacio de trabajo con canales private-encrypted-. Tu servidor sella cada carga con una clave maestra de 32 bytes que tú custodias y entrega texto cifrado a través del edge de Realtime, mientras los nombres de canal y de evento siguen visibles para el enrutamiento.
- 05
Canales de caché.
Ofrece el estado más reciente a quienes se unen tarde y a los clientes móviles que se reconectan, justo al suscribirse, añadiendo el prefijo cache-. Realtime reproduce el último evento publicado con un TTL de hasta 30 minutos y lanza un webhook cache-miss cuando la caché está vacía, para que tu servidor vuelva a cargar una instantánea completa del estado.
Distribuye eventos del backend a hasta 100 canales en una sola llamada.
Publica actualizaciones desde tu backend o tus workers en segundo plano con una solicitud HTTP estándar y deja que Bird se encargue del fan-out por WebSocket a navegadores y dispositivos conectados. Una sola llamada puede difundir un evento a hasta 100 canales (como el feed de un partido en vivo y su gemelo en caché) o agrupar hasta 10 eventos distintos para salas diferentes. Puedes excluir la conexión de la pestaña que actúa cuando tu UI ya aplicó una actualización optimista, devolver el número de conexiones o miembros en vivo en la respuesta de publicación y adjuntar una clave de idempotencia para que los reintentos de red no entreguen 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);
}
Transmite indicadores de escritura y cursores en vivo entre pares.
Las señales efímeras de UI, como los indicadores de escritura, las coordenadas del puntero en vivo y el resaltado de la selección activa, no necesitan pasar por tu backend. Si activas los eventos de cliente en tu app, los suscriptores autorizados de una sala privada o de presencia pueden difundir eventos con prefijo client- directamente a los demás participantes, a hasta 10 mensajes por segundo por conexión. Exigir un canal autenticado impide que visitantes anónimos difundan con tu clave pública de app y mantiene las señales de alta frecuencia fuera de tus servidores de aplicación.
Combina un fan-out de eventos de baja latencia con un estado de aplicación duradero.
La publicación de un evento se completa en cuanto el edge de Realtime lo acepta para distribuirlo de forma asíncrona a los suscriptores conectados en ese momento. Como los canales en vivo envían las actualizaciones al instante en lugar de guardar una cola de mensajes para dispositivos sin conexión, guarda los registros duraderos en tu base de datos y usa eventos publicados o canales de caché para sincronizar las pantallas conectadas. Todos los planes tienen límites predecibles: hasta 100 canales por publicación, 10 eventos por lote, 10 KB por carga de evento y nombres de canal de 164 caracteres.
Profundiza en la documentación.
Consulta la introducción a Realtime para ver cómo encajan canales, miembros y conexiones. Sigue las guías sobre publicación de eventos para el fan-out multicanal y la exclusión en UI optimista, canales de caché para reproducir el estado a quienes se unen tarde y recuperarte de cache-miss, y consulta del estado de canales para comprobar la ocupación de salas en vivo desde tu backend.
Sigue construyendo
con Realtime.
Combina canales pub/sub con listas de usuarios en línea, controles de acceso firmados por el servidor y webhooks del ciclo de vida en el backend.
Presencia
Muestra listas de usuarios en línea, deduplica pestañas abiertas por identidad de usuario y envía mensajes directos a miembros concretos.
→Seguridad
Autoriza suscripciones a salas privadas en tu servidor, autentica conexiones y cifra cargas sensibles de extremo a extremo.
→Webhooks
Activa flujos del backend cuando un canal pasa a estar ocupado, se vacía, cambia su número de miembros o no encuentra datos en caché.
→Escala sin perder el control.
Separate production and sandbox traffic into dedicated workspaces, scope API keys to the exact channels each service or agent needs, and track permission changes in the audit log.