Diffusez des événements en direct vers les navigateurs et applications mobiles connectés.
Envoyez en direct le suivi des commandes, les flux de tokens d'agents IA, l'état des salles collaboratives et les notifications in-app via des canaux pub/sub gérés, sans exploiter d'infrastructure WebSocket. Les canaux s'ouvrent à la demande dès qu'un client s'abonne et se ferment au départ de la dernière connexion. Les modes public, privé, présence, chiffré et cache sont définis par le nom du canal.
channels.ts
4 abonnés4 abonnésconst 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());
Connexion 26896.319537
channels.ts
4 abonnés4 abonnésconst 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());
Connexion 26896.319537
channels.ts
4 abonnés4 abonnésconst 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());
Connexion 26896.319537
Définissez l'accès et le comportement des salles avec le préfixe du canal.
Créez des salles à la demande, sans provisionner de registre de canaux.
Avec l<hub>API Realtime de Bird</hub>, votre application achemine le trafic en direct en sabonnant à un nom de canal sensible à la casse, d'au plus 164 caractères, au lieu de créer des salles à l'avance dans une base de données. Le préfixe du nom fixe la frontière de sécurité et d'état : un nom sans préfixe est ouvert à tout visiteur, private- exige que votre backend autorise l'abonné, presence- ajoute une liste de membres vérifiés et private-encrypted- chiffre les charges utiles des événements de bout en bout. Comme n'importe qui peut rejoindre un canal public avec votre clé d'application publique, réservez les identifiants de clients et de locataires aux préfixes autorisés.
Choisissez le mode de canal selon ce que vous diffusez.
Utilisez la même connexion WebSocket et le même appel de publication backend pour les diffusions publiques, les flux clients authentifiés et les salles collaboratives.
- 01
Canaux publics.
Diffusez des scores sportifs en direct, des horaires de transport, des niveaux de stock ou l'état de vos systèmes à tout visiteur, sans passer par un endpoint d'autorisation. Comme toute personne disposant de votre clé d'application publique peut s'abonner, utilisez des noms de sujets génériques comme scores-live plutôt que d'intégrer des identifiants clients dans les noms de canaux publics.
- 02
Canaux privés.
Diffusez le suivi personnel des commandes, les flux de tokens d'agents IA, les alertes de facturation et les notifications d'espace de travail sur des canaux private-. Lorsqu'un navigateur ou une application mobile s'abonne, votre backend vérifie la session de l'utilisateur et signe l'abonnement avec le secret de votre application, afin qu'aucune connexion non autorisée ne puisse écouter.
- 03
Canaux de présence.
Créez des listes de participants à un document collaboratif, des barres de spectateurs en direct et la disponibilité d'une file de support sur des canaux presence-. Votre serveur autorise chaque abonné et lui associe un profil de membre vérifié : les clients connectés reçoivent la liste des membres actifs de la salle et, en temps réel, les arrivées et les départs.
- 04
Canaux chiffrés.
Protégez les mises à jour de compte sensibles, les notifications financières ou les données confidentielles de l'espace de travail avec des canaux private-encrypted-. Votre serveur chiffre chaque charge utile avec une clé maîtresse de 32 octets que vous détenez. L'edge Realtime ne transmet que le texte chiffré, et les noms de canaux et d'événements restent visibles pour le routage.
- 05
Canaux cache.
Ajoutez le préfixe cache- pour fournir le dernier état dès l'abonnement aux arrivants tardifs et aux clients mobiles qui se reconnectent. Realtime rejoue le dernier événement publié pendant 30 minutes au maximum (TTL) et déclenche un webhook cache-miss quand le cache est vide, afin que votre serveur puisse reconstituer un instantané complet de l'état.
Diffusez les événements backend sur jusqu'à 100 canaux en un seul appel.
Publiez des mises à jour depuis votre backend ou vos workers avec une requête HTTP standard, et laissez Bird gérer le fan-out WebSocket vers les navigateurs et appareils connectés. Un seul appel peut diffuser un événement sur jusqu'à 100 canaux (par exemple le flux d'un match en direct et son équivalent en cache) ou regrouper jusqu'à 10 événements distincts pour différentes salles. Vous pouvez exclure la connexion de l'onglet à l'origine de l'action lorsque votre interface a déjà appliqué une mise à jour optimiste, obtenir le nombre de connexions ou de membres actifs dans la réponse de publication, et joindre une clé d'idempotence pour que les nouvelles tentatives réseau ne livrent pas d'événements en double.
// 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);
}
Diffusez les indicateurs de saisie et les curseurs en direct entre pairs.
Les signaux d'interface éphémères, comme les indicateurs de saisie, les coordonnées du pointeur en direct ou la mise en évidence de la sélection active, n'ont pas besoin de passer par votre backend. Lorsque vous activez les événements client sur votre application, les abonnés autorisés d'une salle privée ou de présence peuvent diffuser des événements préfixés client- directement aux autres participants de la salle, jusqu'à 10 messages par seconde et par connexion. Exiger un canal authentifié empêche les visiteurs anonymes de diffuser avec votre clé d'application publique, et maintient les signaux haute fréquence entre pairs hors de vos serveurs d'application.
Associez un fan-out d'événements à faible latence à un état applicatif durable.
La publication d'un événement réussit dès que l'edge Realtime l'accepte pour un fan-out asynchrone vers les abonnés connectés à ce moment. Les canaux en direct transmettent les mises à jour à la volée sans stocker de file de messages pour les appareils hors ligne : conservez donc les enregistrements durables dans votre base de données et utilisez les événements publiés ou les canaux en cache pour synchroniser les écrans connectés. Des limites prévisibles s'appliquent à toutes les offres : jusqu'à 100 canaux par publication, 10 événements par lot, 10 Ko par charge utile d'événement et des noms de canaux de 164 caractères.
Approfondissez dans la documentation.
Read the <overview>Realtime overview</overview> for how channels, members, and connections fit together. Follow the guides on <publishing>publishing events</publishing> for multi-channel fan-out and optimistic UI exclusion, <cache>cache channels</cache> for late-joiner state replay and cache-miss recovery, and <state>querying channel state</state> for checking live room occupancy from your backend.
Continuez à développer
avec Realtime.
Associez les canaux pub/sub à des listes de présence en direct, à des contrôles d'accès signés par le serveur et à des webhooks de cycle de vie côté backend.
Présence
Affichez les membres en ligne en direct, dédupliquez les onglets ouverts par identité d'utilisateur et envoyez des messages directement à chaque membre.
→Sécurité
Autorisez les abonnements aux salles privées sur votre serveur, authentifiez les connexions et chiffrez les charges utiles sensibles de bout en bout.
→Webhooks
Déclenchez des workflows backend lorsqu'un canal devient occupé, se vide, change de nombre de membres ou rencontre un cache-miss.
→Passez à l'échelle sans perdre le contrôle.
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.