Un canal es un nombre. Nada que aprovisionar.
Un canal existe en cuanto algo se suscribe a él y desaparece cuando la última conexión se va. Su nombre determina el tipo: público para lo que cualquier visitante pueda leer, privado para lo que está limitado a un cliente, presencia para una sala con lista de miembros, y un prefijo de caché para el estado que un suscriptor tardío necesita de inmediato.
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());
El prefijo es la configuración.
No hay un registro de canales que mantener sincronizado.
Los canales son el modelo de direccionamiento de la Bird Realtime API. Nunca creas uno: te suscribes a un nombre y los tres primeros caracteres de ese nombre le indican al borde cómo tratarlo. Un nombre sin prefijo es público. private- pide a tu backend que apruebe cada suscripción. presence- hace lo mismo y adjunta una identidad. private-encrypted- sella el contenido con una clave que Bird nunca posee. Los nombres admiten hasta 164 caracteres, distinguen mayúsculas de minúsculas, y son la única parte de un canal que deberías pensar con cuidado, porque un nombre público es visible para cualquiera que tenga la clave de la aplicación.
Cinco tipos de sala.
Mismo protocolo, mismo cliente, misma llamada de publicación. Lo que cambia es el nombre.
- 01
Canales públicos.
Sin endpoint de autorización, sin registro. Cualquiera que tenga la clave de la aplicación puede suscribirse, lo que los hace ideales para resultados de compilaciones, marcadores en vivo, información de vuelos o una página de estado, e inadecuados para cualquier cosa limitada a un solo cliente. Mantén los identificadores fuera del nombre: orders no revela nada, orders-user-4821 revela que el usuario 4821 existe.
- 02
Canales privados.
Un nombre con private- enruta la suscripción a través de tu propio endpoint, que verifica la sesión y firma el id de conexión y el nombre del canal con el secreto de la aplicación. Tus reglas, tu sesión, tu 403. El borde verifica la firma y nada más llega al canal.
- 03
Canales de presencia.
Autorización de canal privado más una identidad, así que cada suscriptor recibe la lista de miembros y se entera de llegadas y salidas. Este es el único tipo de canal con lista de miembros.
- 04
Canales cifrados.
Un canal private-encrypted- transporta contenidos que tu servidor sella con una clave maestra de 32 bytes que nunca aparece en una solicitud de Realtime. El borde y todo lo que hay entre él y el navegador ven texto cifrado. Los nombres de canal y evento permanecen en claro, así que elige nombres que no filtren lo que estás protegiendo.
- 05
Canales de caché.
Antepón cache- al nombre, después de cualquier prefijo de tipo, y el canal recuerda su último evento publicado vía API y lo reproduce para cada nuevo suscriptor. La suscripción funciona a la vez como la carga del estado inicial. Dos restricciones que vale la pena tener en cuenta en el diseño: solo se conserva el evento más reciente, y puede expirar antes del límite de 30 minutos, así que incluye el estado completo en cada payload y repuébla desde el webhook de cache-miss en lugar de asumir que la caché está caliente.
Una publicación, hasta cien canales.
Publicar es una llamada REST ordinaria desde tu servidor. Nombra hasta 100 canales en una sola solicitud y el borde distribuye el evento a todos ellos. Un lote transporta hasta 10 eventos independientes, cada uno a su propio canal. Pasa el id de conexión del cliente que actúa como exclude_connection_id y la pestaña que ya aplicó el cambio localmente se omite. Solicita conteos de conexiones o miembros con include y la respuesta te indica el estado de cada canal en el momento de la publicación. Reintenta con la misma clave de idempotencia y no entregarás dos veces.
// 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);
}
Los clientes pueden comunicarse entre sí directamente.
Un indicador de escritura o la posición de un cursor no necesitan pasar por tu API. Activa los eventos de cliente en la aplicación y un cliente suscrito puede disparar un evento llamado client-algo directamente a los demás en el canal, con un límite de 10 por segundo por conexión. Solo funcionan en canales privados y de presencia, y es deliberado: la clave de la aplicación va en tu página, así que la autorización es lo que hace a un cliente lo bastante confiable para emitir. Trata lo que llega como una señal, nunca como estado autoritativo, porque el borde no valida el payload.
Lo que un canal recordará y lo que no.
Una publicación retorna en cuanto el borde acepta el evento. La entrega es asíncrona, no hay acuse de recibo por cliente, y un cliente que se desconecta a mitad de la entrega no recibirá el evento de nuevo al reconectarse. Ese es el contrato honesto, y por eso el estado duradero pertenece a tu base de datos y los eventos anuncian que cambió. Los límites son los mismos en todos los planes: 100 canales por publicación, 10 eventos por lote, 10 KB por payload, nombres de canal de 164 caracteres.
Profundiza en la documentación.
La descripción general de Realtime define canales, miembros y conexiones en una sola página. Publicar eventos cubre difusión, lotes y exclusión, canales de caché explica la reproducción, y consultar el estado de un canal es la lectura del lado del servidor para ocupación y conteos.
El resto de Realtime
Una aplicación, un par de claves. Explora las demás capacidades.
Escala sin
perder el control.
Organiza equipos en espacios de trabajo, controla el acceso a la API y rastrea cambios en los registros de auditoría.
Registro de auditoría
Producción- Espacio de trabajo
- Producción
- Recurso
- Agente de entrega
- Acceso de lecturaLectura y escritura